数据帧考拉到增量表:错误:调用 o237.save 时发生错误

Posted

技术标签:

【中文标题】数据帧考拉到增量表:错误:调用 o237.save 时发生错误【英文标题】:Dataframe Koalas to Delta Table: ERROR: An error occurred while calling o237.save 【发布时间】:2019-10-24 21:22:59 【问题描述】:

我使用 Pandas 从驱动程序节点读取了几个 csv 文件,我将 Pandas Dataframe 转换为 Koalas Dataframe,最后,我想将 Koalas 中的数据插入到 Delta 表中,但出现错误:

import databricks.koalas as ks
import pandas as pd
import glob
all_files = glob.glob('/databricks/driver/myfolder/')
li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
df = ks.from_pandas(frame)              
df.to_delta('dbfs:/FileStore/filesTest/%s' % tablename, mode='append')

错误:调用 o237.save 时出错。 : java.lang.IllegalStateException:在 Spark 中找不到 REPL id 本地属性。 Spark-submit 和 R 不支持事务性 来自不同集群的写入。如果您使用的是 R,请切换到 斯卡拉或 Python。如果您使用 spark-submit ,请将其转换为 Databricks JAR 作业。或者您可以通过设置禁用多集群写入 'spark.databricks.delta.multiClusterWrites.enabled' 为'假'。如果 这是禁用的,对单个表的写入必须来自 单个集群。请检查 https://docs.databricks.com/delta/delta-intro.html#frequently-asked-questions-faq 了解更多详情。

【问题讨论】:

我认为有必要将作业作为 spark-python-task 运行 【参考方案1】:

Delta Lake 在 Databricks Runtime 4.2 及更高版本中支持来自同一工作区中多个集群的事务性写入。所有编写器都必须运行 Databricks Runtime 4.2 或更高版本。

在此模式下运行时不支持以下功能:

SparkR spark 提交作业 使用 REST API 运行命令 客户端加密 使用客户提供的加密密钥进行服务器端加密 在无法访问 AWS Security Token Service 的集群中具有凭证的 S3 路径

确保:

如果您使用 R,请切换到 Scala 或 Python。 如果您使用的是 spark-submit ,请将其转换为 Databricks JAR 作业。

参考:“Delta Lake - Introductory Notebooks”和“Delta - FAQs”。

希望这会有所帮助。

【讨论】:

以上是关于数据帧考拉到增量表:错误:调用 o237.save 时发生错误的主要内容,如果未能解决你的问题,请参考以下文章

网易考拉数据仓库构建实践

Pyspark 错误:“Py4JJavaError:调用 o655.count 时出错。”在数据帧上调用 count() 方法时

使用 idx 自动增量将数据帧插入到 postgresql sqlalchemy

Py4JJavaError:调用 o57.sql 时发生错误。:org.apache.spark.SparkException:作业中止

AWS EMR - 将数据帧保存到 S3 上的配置单元外部表中 - 出现内存泄漏错误

增量文件版本的 Pyspark 结构化流错误