【问题标题】:spark scala dataframe writer insertInto overwritespark scala 数据帧编写器 insertInto 覆盖
【发布时间】:2021-05-23 08:13:06
【问题描述】:

我正在尝试将数据帧的内容写入现有的分区托管 Hive 表,如下所示:

outputDF.write.mode("Overwrite").insertInto(targetTable)

目标表是 ORC,我希望保留它。使用 saveAsTable 会将表删除并重新创建为镶木地板(请参阅此处:What are the differences between saveAsTable and insertInto in different SaveMode(s)?)。

问题在于我的某些表需要覆盖整个表数据(类似于截断),而不仅仅是特定分区。

我不清楚在这种情况下是否支持覆盖,如果支持,我做错了什么。 SparkSession 设置以下配置值:

.config("spark.sql.sources.partitionOverwriteMode", "static"/"dynamic")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")

我错过了什么吗?

另外,我怀疑这可以通过 SQL API 实现,但我试图避免它。

SD_

【问题讨论】:

    标签: scala apache-spark hive apache-spark-sql


    【解决方案1】:
    // 1. 
    outputDF.write.format("parquet").mode("overwrite").saveAsTable(targetTable)
    // 2. 
    import org.apache.spark.sql.{SaveMode}
    outputDF
     .write
     .format("parquet")
     .mode(SaveMode.Overwrite)
     .saveAsTable(targetTable)
    

    【讨论】:

    • 如果可能请提供描述
    • 谢谢!虽然我正在寻找 insertInto 而不是 saveAsTable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2020-08-28
    相关资源
    最近更新 更多