从spark保存分区Parquet地板配置单元表的问题

bbuxkriu  于 2021-06-28  发布在  Hive
关注(0)|答案(0)|浏览(276)

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试图在配置单元中创建不存在的表。但是当我删除分区语句时,一切都很正常。
那么,我错在哪里呢?或者,有一个快速解决这个问题的方法?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题