首页 > 解决方案 > 使用 Spark org.apache.spark.SparkException 将 csv 写入分区 Hive 表:请求的分区与表不匹配

问题描述

我有一个现有的 Hive 表:

CREATE TABLE form_submit (form_id String,
submitter_name String)
PARTITIONED BY
submission_date String)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS ORC;

我有一个原始数据的 csv,我使用

 val session = SparkSession.builder()
      .enableHiveSupport()
      .config("spark.hadoop.hive.exec.dynamic.partition", "true")
      .config("spark.hadoop.hive.exec.dynamic.partition.mode", "nonstrict")
      .getOrCreate()
 val dataframe = session
      .read
      .option("header", "true")
      .csv(hdfsPath)

然后,我使用一系列withColumnanddrop语句对这些数据执行一些操作,以确保格式与表格格式匹配。

然后我尝试这样写:

formattedDataframe.write
      .mode(SaveMode.Append)
      .format("hive")
      .partitionBy("submission_date")
      .saveAsTable(tableName)

我没有使用insertInto,因为数据框中的列以错误的顺序结束,而且我不想依赖列顺序。

并将其作为 Spark 作业运行。我得到一个例外:

Exception in thread "main" org.apache.spark.SparkException: Requested partitioning does not match the form_submit table:
Requested partitions:
Table partitions: "submission_date"

我究竟做错了什么?我不是通过调用选择了分区partitionedBy吗?

标签: sqlscalaapache-sparkhive

解决方案


推荐阅读