从Spark中保存分区镶木地板HIVE表的问题

时间:2016-08-05 08:17:44

标签: apache-spark hive partitioning parquet

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)
实际上没什么特别的,但是当它生成时我无法从表中读取任何数据。

关键点在于分区 - 没有它一切正常。 以下是解决问题的步骤:

  1. 首先,在简单的选择配置单元中返回该表未被分区。 - 好吧,似乎Spark忘了在DDL中提到分区方案。我修复了它手动创建表格

  2. 尝试#2 - 仍然没有,实际上发生的事情是,hive Metastore不知道该表在dwh中有任何分区。修正了: 蜂房> msck修理表

  3. 尝试#3 - nope,现在hive突发异常,如:java.io.IOException:ort.apache.hadoop.hive.serde2.SerDeException:java.lang.NullPointerException。好吧,spark定义了错误的序列化程序。修复了设置STORED AS PARQUET

  4. 的问题
  5. 不。不记得除了它之外的东西,但我意识到火花用单列替换了我的方案: 来自反序列化程序的col数组COMMENT' 我用一个替换它 - 另一个问题出来了。

  6. 我已经完成了。对我来说,似乎spark生成完全错误的ddl试图在hive中创建不存在的表。但是当我删除分区语句时,一切都很好。

    那么我错在哪里,或者,或许可以快速解决这个问题?

0 个答案:

没有答案