运行 spark.read.json 时在其中一个 json 中发现重复列,即使没有重复列

Posted

技术标签:

【中文标题】运行 spark.read.json 时在其中一个 json 中发现重复列,即使没有重复列【英文标题】:Found duplicate column in one of the json when running spark.read.json even though there are no duplicate columns 【发布时间】:2022-01-03 23:26:42 【问题描述】:

我在 PySpark 和 Synapse 数据流中遇到非常奇怪的错误。

我正在读取带有以下查询的 JSON 文件,但出现重复列错误即使没有重复列。我可以使用其他工具和 JSON 验证器以及数据流读取它,但在 PySpark 中不行。

PySpark 查询如下:

df = (
    spark.read.option("multiline", "true")
    .options(encoding="UTF-8")
    .load(
        "abfss://<Container>]@<DIR>.dfs.core.windows.net/export28.json", format="json"
    )
)

这是我得到的堆栈跟踪:

AnalysisException:在数据架构中发现重复列:amendationcommentkeyamendationreasonkeyamendationregulatoryproofkey Traceback(最近一次调用最后一次):

文件“/opt/spark/python/lib/pyspark.zip/pyspark/sql/readwriter.py”,第 204 行,加载中 return self._df(self._jreader.load(path))

调用中的文件“/home/trusted-service-user/cluster-env/env/lib/python3.8/site-packages/py4j/java_gateway.py”,第 1304 行 return_value = get_return_value(

文件“/opt/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,第 117 行,deco raise 从 None 转换而来

pyspark.sql.utils.AnalysisException:在数据架构中发现重复列:amendationcommentkeyamendationreasonkeyamendationregulatoryproofkey

【问题讨论】:

【参考方案1】:

这表明如果我们在***列以及嵌套结构中有任何重复的名称。

以下是Apache Spark website的声明:

在 Spark 3.1 中,Parquet、ORC、Avro 和 JSON 数据源在检测到时会在读取时抛出异常 org.apache.spark.sql.AnalysisException: Found duplicate column(s) in the data schema ***列以及嵌套结构中的重复名称。这 数据源考虑了 SQL 配置 spark.sql.caseSensitive 检测列名重复时。

尝试使用您的命令如下,因为一切都取决于架构,因为这段代码成功地帮助了我的情况。

Sch = spark.read.json(schemaPath)
schema = Sch.schema

df = spark.read.option("multiline","true").schema(schema).json(f"json_path")

另请参阅这些 SO(SO1、SO2、SO3)。正如作者在不同的场景中给出了很好的解释。

【讨论】:

这个答案解决了您的问题吗?

以上是关于运行 spark.read.json 时在其中一个 json 中发现重复列,即使没有重复列的主要内容,如果未能解决你的问题,请参考以下文章

Spark Read Json:如何读取在整数和结构之间交替的字段

将 json 文件读入 Spark DataFrame

OutOfMemoryError : Spark 中的 Java 堆空间

spark常用操作

spark常用操作

Spark 解析 JSON 仅包含数组和整数