Apache spark 如何将txt文件转换为拼花地板文件并将其加载到hdfs表格pyspark中

Apache spark 如何将txt文件转换为拼花地板文件并将其加载到hdfs表格pyspark中,apache-spark,hive,pyspark,Apache Spark,Hive,Pyspark,我有一个文本文件,我正试图将其转换为拼花地板文件,然后通过将其写入hdfs路径将其加载到配置单元表中。一切都在运行,但表中没有显示任何值 这是我的密码: #Create my table spark.sql("create external table if not exists table1 ( c0 string, c1 string, c2 string) STORED AS parquet LOCATION 'hdfs://hadoop_data/hive/table1'") hd

我有一个文本文件,我正试图将其转换为拼花地板文件,然后通过将其写入hdfs路径将其加载到配置单元表中。一切都在运行,但表中没有显示任何值

这是我的密码:

#Create my table
spark.sql("create  external table if not exists table1 ( c0 string, c1 string, c2 string)  STORED AS parquet LOCATION 'hdfs://hadoop_data/hive/table1'")

hdfs="hdfs://hadoop_data/hive/table1/output.parquet"

#Read my data file
e=spark.read.text("/home/path/sample_txt_files/sample5.txt")

#Write it to hdfs table as a parquet file
e.write.parquet("hdfs")
一切都在运行,但当我通过从表1中选择*检查表的内容时,没有值:

sample5.txt文件中的内容如下所示:

ID,Name,Age
1,James,15
.parqeut文件中的内容


关于为什么表中没有显示数据,有什么想法或建议吗?

我会检查底层拼花地板数据类型,并与您的蜂巢架构进行比较。
也就是说,id、名称和年龄都是配置单元表中的字符串。
但是,当您写出拼花地板时,id和age的数据类型可能是int而不是string。

在编写
hdfs://hadoop_data/hive/table1/output.parquet
目录,但在
hdfs://hadoop_data/hive/table1/
。在编写
output.parquet
嵌套目录时

SET hive.mapred.supports.subdirectories=TRUE;
SET mapred.input.dir.recursive=TRUE;
然后检查您是否能够看到表中的数据

(或)

尝试使用
函数将数据直接插入
表中

e.write.format("parquet").insertInto("default.table1")
更新: 当您正在读取文本文件时,即使您有3列,spark也会读取为一列(值)


如果您有
csv文件(或任何其他分隔符文件)
请使用带有选项的
spark.read.csv()
来读取该文件。

您是否尝试在不带引号的情况下运行上一个命令?看起来您传递的是字面上的“hdfs”,而不是字符串sdfs(完整路径)。问题是,它读取的是parquet目录,而不是parquet文件夹中的success文件。你知道如何通过它并读取所有成功的拼花地板文件吗?是的,我也尝试过不使用引号。你能试试这个
e.write.parquet(“hdfs://hadoop_data/hive/table1/output.parquet“
?您是否曾经遇到过下面这个问题中的情况。后来我无法复制它。donnow为什么它会出现并得到解决。当我尝试直接向表中插入数据时,它给出的错误是目标表有3列,但插入的数据有1列,但在将其格式化为拼花之前,它有3列。你认为一旦转换到拼花地板,它会改变柱子的数量吗?@JamesDavinport,请检查更新的答案。@vikrantrana,对不起。。我无法使用
spark 2.4
版本重新创建场景。一切都按预期进行..!@dhnsh,谢谢你帮我查看。:-)是的,即使是我也无法复制它。我去年就遇到过这个问题,不知道它是怎么自己解决的。不过我在spark 2.3上工作。
e=spark.read.text("/home/path/sample_txt_files/sample5.txt") //returns dataframe

f=e.withColumn("c0",split(col("value"),",")(0)).withColumn("c1",split(col("value"),",")(1)).withColumn("c2",split(col("value"),",")(2)).drop("value") //split the column and extract data

f.write.format("parquet").insertInto("default.table1")