首页 > 解决方案 > 非分区非事务配置单元表的自我覆盖是否适用于火花?

问题描述

我们在 yarn-client 模式下使用 spark 自己覆盖一个非分区表,就像我们在 Hive 中所做的那样。如果我们从集群本身(HDP-3.1.0)执行代码,则此方法有效,而当我们使用集群外部的客户端运行它时,会出现以下错误:“pyspark.sql.utils.AnalysisException:无法覆盖也正在从中读取的路径。;"。

在为您提供示例之前,我们希望回答以下问题:

  1. vanilla Spark(例如2.4.3 ...)是否支持非分区非事务表的自我覆盖?
  2. 您是否知道这如何/为什么与集群本身的 HDP-3.1.0 一起工作?

我们为您提供了一个示例代码,我们在集群上遇到了错误。我们尝试了 spark 版本的代码(2.4.3 ad spark 3.0.1)仅供参考:该表spark_test.overwrite_test1是一个非事务性非分区配置单元表,它使用 ORC 文件写入数据。覆盖分区的非事务表有效

 #! /usr/bin/env python3
    """Testing Spark insert overwrite of table on themselves"""
    from pyspark.sql.session import SparkSession
    import sys
    
    name=sys.argv[1] if len(sys.argv) > 1 else ""
    spark = (
        SparkSession.builder.appName("stack_suite_"+name)
        .enableHiveSupport()
        .config("spark.hadoop.hive.exec.dynamic.partition.mode", "nonstrict")
        .config("spark.sql.sources.partitionOverwriteMode", "dynamic")
        .config("spark.sql.hive.convertMetastoreOrc", "false")
        .getOrCreate()
    )
    
    
    spark.sql("""insert overwrite table spark_test.overwrite_test1 
        select * from spark_test.overwrite_test1 where id < 90
        """)

我们期待得到您的回复。

标签: apache-sparkhive

解决方案


推荐阅读