我遇到了从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] –