sql - 使用 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)
然后,我使用一系列withColumn
anddrop
语句对这些数据执行一些操作,以确保格式与表格格式匹配。
然后我尝试这样写:
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
吗?
解决方案
推荐阅读
- javascript - 如何在状态更改时强制重新加载 react-recaptcha(语言更新)
- multithreading - TCP 分布式系统上的多路复用与多线程
- file - 文件类型会影响下载或上传速度吗?
- c++ - 在不使用虚拟方法的情况下静态强制 C++ 类接口
- java - 使用模拟退火的图形着色
- c# - 引用的程序集扩展名是 .exe 时 ASP.NET MVC 运行时错误,将程序集重命名为 .dll 时没有错误
- java - 不同服务器上 Apache Karaf(可能是 java)的不同行为
- python - python烧瓶网站错误:在服务器上找不到请求的URL
- java - spring boot 聚合没有给出预期的结果
- python - 关于 matplotlib.pyplot.matshow 和 np 矩阵对象的一些相关问题:绘制“None”/“nan”和 x 轴偏移