如何使用spark将Parquet文件加载到配置单元表中?

hi3rlvi2  于 2021-06-24  发布在  Hive
关注(0)|答案(3)|浏览(367)

所以,我尝试加载一个csv文件,然后将其保存为Parquet文件,然后将其加载到一个配置单元表中。但是,每当它将其加载到表中时,值就不合适,到处都是
以下是我的csv文件中的内容:

以下是我将csv转换为parquet并将其写入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')

这成功地将它转换为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;

输出:

有什么想法/建议吗?

busg9geu

busg9geu1#

您可以在一条语句中同时执行这两项操作,而不是创建一个表然后将数据加载到其中。

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/' ;
yqhsw0fo

yqhsw0fo2#

如果您描述您的表,它很可能会显示您的表以orc格式存储数据,因为它是配置单元的默认格式。因此,在创建表时,请确保提及存储底层数据的格式,在本例中为parquet。

rbl8hiat

rbl8hiat3#

而不是保存为Parquet地板,然后试图插入Hive df.write.save('hdfs://my_path/table/test1.parquet') 你可以直接像下面这样做。。。

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

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

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

相关问题