簡體   English   中英

如何使用 Spark 將鑲木地板文件加載到 Hive 表中?

[英]How to load a parquet file into a Hive Table using Spark?

所以,我試圖加載一個 csv 文件,然后將其保存為鑲木地板文件,然后將其加載到 Hive 表中。 但是,無論何時將其加載到表中,值都不合適並且到處都是。我正在使用 Pyspark/Hive

這是我的 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')

這成功地將它轉換為鑲木地板和路徑,但是當我在 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;

輸出: 在此處輸入圖片說明

任何想法/建議?

而不是保存為鑲木地板,然后嘗試插入到配置單元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

您可以在一個語句中完成這兩項操作,而不是創建一個表然后將數據加載到其中。

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

如果你描述你的表,它很可能會顯示你的表以 ORC 格式存儲數據,因為它是 Hive 的默認格式。 因此,在創建表時,請確保提及存儲基礎數據的格式,在本例中為 parquet。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM