如何将txt文件转换为实木复合地板文件并将其加载到hdfs table-pyspark

时间:2019-08-05 21:46:25

标签: 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'")

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")

一切正常,但是当我通过选择table1中的*来检查表的内容时,没有任何值:

txt fi

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

ID,Name,Age
1,James,15

.parqeut文件内的内容 enter image description here

关于表格中为何没有数据的任何想法或建议?

2 个答案:

答案 0 :(得分:2)

您在编写hdfs://hadoop_data/hive/table1/output.parquet目录时是否尝试在配置单元中设置这些参数,但是在hdfs://hadoop_data/hive/table1/上创建了 table 。在编写 output.parquet 嵌套目录时。

SET hive.mapred.supports.subdirectories=TRUE;
SET mapred.input.dir.recursive=TRUE;

然后检查您是否可以查看hive表中的数据。

(or)

尝试使用 table directly 函数将数据插入.insertInto

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

更新:

即使您有3列,您仍在读取文本文件时,spark读取为一列(值)。

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")

如果您有 csv file (or) any other delimiter file ,请使用spark.read.csv()及其选项来读取文件。

答案 1 :(得分:0)

与您的配置单元架构相比,我将检查底层实木复合地板数据类型。
据说,ID,名称,年龄都是蜂巢表中的字符串。 但是当您写出实木复合地板时,id和age的数据类型可能是整数而不是字符串。