如何将实木复合地板文件加载到Hive表中

时间:2019-07-22 20:54:38

标签: apache-spark hive pyspark pyspark-sql

因此,我尝试加载一个csv文件,然后将其另存为拼花文件,然后将其加载到Hive表中。但是,每当将其加载到表中时,这些值就不正确了,而且到处都是。我正在使用Pyspark / Hive

这是我的csv文件中的内容: enter image description here

这是我的代码,用于将csv转换为镶木地板并将其写入我的HDFS位置:

#This creates the sparkSession 
from pyspark.sql import SparkSession
#from pyspark.sql import SQLContext
spark = (SparkSession \
        .builder \
        .appName("S_POCC") \
        .enableHiveSupport()\
        .getOrCreate())

df = spark.read.load('/user/new_file.csv', format="csv", sep=",", inferSchema="true", header="false")
df.write.save('hdfs://my_path/table/test1.parquet')

这成功地将其转换为实木复合地板和路径,但是当我在Hive中使用以下语句加载它时,它给出了一个奇怪的输出。

蜂巢语句:

drop table sndbx_test.test99 purge ;

create external table if not exists test99 ( c0 string, c1 string, c2 string, c3 string, c4 string, c5 string, c6 string);

load data inpath 'hdfs://my_path/table/test1.parquet;

输出: enter image description here

有什么想法/建议吗?

3 个答案:

答案 0 :(得分:0)

您可以在一条语句中同时完成这两项工作,而不是创建表然后再将数据加载到表中。

CREATE EXTERNAL TABLE IF NOT EXISTS test99 ( c0 string, c1 string, c2 string, c3 string, c4 string, c5 string, c6 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
STORED AS PARQUET
LOCATION 'hdfs://my_path/table/' ;

答案 1 :(得分:0)

与其保存为实木复合地板,然后尝试将其插入配置单元df.write.save('hdfs://my_path/table/test1.parquet')

,而是

您可以像下面这样直接做...

df.write.format("parquet").partitionBy('yourpartitioncolumns').saveAsTable('yourtable')

OR

df.write.format("parquet").partitionBy('yourpartitioncolumns').insertInto('yourtable')

注意:如果您没有分区列并且是非分区表,则不需要partitionBy

答案 2 :(得分:-1)

如果描述表,则很可能表明表以ORC格式存储数据,因为它是Hive的默认设置。 因此,在创建表时,请确保提及基础数据的存储格式,在本例中为拼花。