我遇到了從Spark寫入Hive表格的問題。下面的代碼工作得很好;我可以寫表(默認爲實木複合地板格式),並在蜂巢讀回:從Spark指定CSV格式的Hive表格作爲格式
df.write.mode('overwrite').saveAsTable("db.table")
hive> describe table;
OK
val string
Time taken: 0.021 seconds, Fetched: 1 row(s)
但是,如果我指定的格式應該是CSV:
df.write.mode('overwrite').format('csv').saveAsTable("db.table")
然後我可以保存表,但蜂房無法識別的模式:
hive> describe table;
OK
col array<string> from deserializer
Time taken: 0.02 seconds, Fetched: 1 row(s)
這也是值得注意的是,我可以手動創建一個配置單元表,然後insertInto
它:
spark.sql("create table db.table(val string)")
df.select('val').write.mode("overwrite").insertInto("db.table")
這樣做,Hive似乎認識到架構。但是這太笨重了,我無法想出一個方法來自動化模式字符串。
Dataframe的模式是什麼?數據中是否有逗號? –
** df.printSchema **的輸出是什麼? –
爲什麼_「笨重」_?您希望創建一個Hive兼容的數據集,因此使用符合Hive的方法創建該數據集似乎是合理的。並且對於記錄來說,使用Parquet更糟糕,因爲默認情況下,Spark不使用與Hive相同的二進制編碼...並且重寫該默認值的方式未記錄在案。 [SPARK-20937] –