火花1.6.0
蜂巢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)
实际上没有什么特别的,但是当它生成时我无法从表中读取任何数据。
关键点在于分区 - 没有它一切都可以正常工作。
以下是我解决问题的步骤:
首先,简单的 select hive 返回表未分区。 - 好吧,Spark 似乎忘记提及 DDL 中的分区方案。我修复了手动创建表格的问题
尝试 #2 - 仍然没有任何结果,实际上发生的是 hive 元存储不知道该表在 dwh 中有任何分区。通过以下方式修复它:
hive> msck 修复表
尝试#3 - 不,现在蜂巢爆发异常,类似:java.io.IOException:ort.apache.hadoop.hive.serde2.SerDeException:java.lang.NullPointerException。好吧,spark 定义了错误的序列化器。修复了它的设置STORED AS PARQUET
没有。不记得它是什么,但我意识到 Spark 用单列替换了我的方案:col
数组 COMMENT '来自反序列化器'
我用正确的替换了它 - 又出现了一些问题。
到这里我就完成了。对我来说,spark 似乎生成了完全错误的 ddl 试图在 hive 中创建不存在的表。但是当我删除分区语句时,一切都工作得很好。
那么我错在哪里,或者也许有一个快速解决该问题的方法?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)