spark 1.6.0Hive1.1.0-cdh5.8.0
我在将Dataframe保存到spark的 parquet 分区配置单元表中时遇到了一些问题。
这是我的密码:
val df = sqlContext.createDataFrame(rowRDD, schema)
df.write
.mode(SaveMode.Append)
.format("parquet")
.partitionBy("year")
.saveAsTable(output)
实际上,没有什么特别的,但是当表生成时,我不能从中读取任何数据。
关键是分区——没有分区,一切都会正常工作。以下是我解决问题的步骤:
首先,在simple select hive上返回表未分区。-好吧,好像spark忘了在ddl中提到分区方案。我修复了手动创建表的问题
尝试#2-仍然没有什么,实际上发生的是,配置单元元存储不知道表在dwh中有任何分区。修正方法:hive>msck repair table
尝试#3-不,现在Hive爆发异常,smth-like:java.io.ioexception:ort.apache.hadoop.hive.serde2.serdeexception:java.lang.nullpointerexception。好的,spark定义了错误的序列化程序。修正了它的设置 STORED AS PARQUET
不。不记得是什么例外,但我意识到spark用单列取代了我的方案: col
数组注解“来自反序列化程序”我将其替换为相应的注解-出现了另一个问题。
我已经说完了。在我看来,spark生成完全错误的ddl试图在配置单元中创建不存在的表。但是当我删除分区语句时,一切都很正常。
那么,我错在哪里呢?或者,有一个快速解决这个问题的方法?
暂无答案!
目前还没有任何答案,快来回答吧!