![](/img/trans.png)
[英]How can we load a hive table created over json data to spark dataframe using spark.sql?
[英]How to load a parquet file into a Hive Table using Spark?
所以,我試圖加載一個 csv 文件,然后將其保存為鑲木地板文件,然后將其加載到 Hive 表中。 但是,無論何時將其加載到表中,值都不合適並且到處都是。我正在使用 Pyspark/Hive
這是我將 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.