运行 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:在数据架构中发现重复列:
amendationcommentkey
、amendationreasonkey
、amendationregulatoryproofkey
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:在数据架构中发现重复列:
amendationcommentkey
、amendationreasonkey
、amendationregulatoryproofkey
【问题讨论】:
【参考方案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:如何读取在整数和结构之间交替的字段