Spark 1.6.0 Hive 1.1.0-cdh5.8.0
我在将数据帧保存到Spark中的镶木地板支持的分区Hive表时遇到了一些问题。
这是我的代码:
val df = sqlContext.createDataFrame(rowRDD, schema)
df.write
.mode(SaveMode.Append)
.format("parquet")
.partitionBy("year")
.saveAsTable(output)
实际上没什么特别的,但是当它生成时我无法从表中读取任何数据。
关键点在于分区 - 没有它一切正常。 以下是解决问题的步骤:
首先,在简单的选择配置单元中返回该表未被分区。 - 好吧,似乎Spark忘了在DDL中提到分区方案。我修复了它手动创建表格
尝试#2 - 仍然没有,实际上发生的事情是,hive Metastore不知道该表在dwh中有任何分区。修正了: 蜂房> msck修理表
尝试#3 - nope,现在hive突发异常,如:java.io.IOException:ort.apache.hadoop.hive.serde2.SerDeException:java.lang.NullPointerException。好吧,spark定义了错误的序列化程序。修复了设置STORED AS PARQUET
不。不记得除了它之外的东西,但我意识到火花用单列替换了我的方案:
来自反序列化程序的col
数组COMMENT'
我用一个替换它 - 另一个问题出来了。
我已经完成了。对我来说,似乎spark生成完全错误的ddl试图在hive中创建不存在的表。但是当我删除分区语句时,一切都很好。
那么我错在哪里,或者,或许可以快速解决这个问题?