我有一个文本文件,尝试将其转换为拼花文件,然后通过将其写入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中的*来检查表的内容时,没有任何值:
sample5.txt文件中的内容如下:
ID,Name,Age
1,James,15
关于表格中为何没有数据的任何想法或建议?
答案 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的数据类型可能是整数而不是字符串。