abh*_*kar 5 apache-spark apache-spark-sql pyspark
从 spark 保存托管表时,我们间歇性地面临 spark 2.4 中的以下错误。
错误 - pyspark.sql.utils.AnalysisException: u"Can not create the managed table('hive_issue.table')。关联的位置('s3://{bucket_name}/EMRFS_WARE_TEST167_new/warehouse/hive_issue.db/table')已经存在。;”
重现步骤-- 1. 从 Spark 中型数据(30MB CSV 文件)创建数据框 2. 将数据框另存为表 3. 在上述操作进行时终止会话
注意 - 会话终止状态只是重现此问题的一种方式。实际上,当我们多次运行相同的 Spark 作业时,我们会间歇性地面临这个问题。我们使用 EMR 集群中的 EMRFS 和 HDFS,我们在两个系统上都面临同样的问题。我们可以解决此问题的唯一方法是删除表将保留其文件的目标文件夹,这不是我们的选择,我们需要将历史信息保留在表中,因此我们在写入表时使用 APPEND 模式。
我们浏览了 spark 2.4 [1] 的文档,发现 spark 不再允许在非空文件夹上创建管理表。
[1] 从 Spark 2.4 开始,不允许创建具有非空位置的托管表。尝试创建具有非空位置的托管表时会引发异常。将 spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation 设置为 true 会恢复之前的行为。Spark 3.0 中将删除此选项。
谢谢,阿比吉特
from pyspark.sql import SparkSession
sc = SparkSession.builder.enableHiveSupport().getOrCreate()
df = sc.read.csv("s3://{sample-bucket}1/DATA/consumecomplians.csv")
print "STARTED WRITING TO TABLE"
# Terminate session using ctrl + c after this statement post df.write action started
df.write.mode("append").saveAsTable("hive_issue.table")
print "COMPLETED WRITING TO TABLE"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |