java - 在 Apache Spark 中解析 JSON 时出现奇怪的错误
问题描述
尝试解析 JSON 文档和 Spark 给我一个错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException: Since Spark 2.3, the queries from raw JSON/CSV files are disallowed when the
referenced columns only include the internal corrupt record column
(named _corrupt_record by default). For example:
spark.read.schema(schema).json(file).filter($"_corrupt_record".isNotNull).count()
and spark.read.schema(schema).json(file).select("_corrupt_record").show().
Instead, you can cache or save the parsed results and then send the same query.
For example, val df = spark.read.schema(schema).json(file).cache() and then
df.filter($"_corrupt_record".isNotNull).count().;
at org.apache.spark.sql.execution.datasources.json.JsonFileFormat.buildReader(JsonFileFormat.scala:120)
...
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73)
at org.apache.spark.sql.Dataset.withAction(Dataset.scala:3364)
at org.apache.spark.sql.Dataset.head(Dataset.scala:2545)
at org.apache.spark.sql.Dataset.take(Dataset.scala:2759)
at org.apache.spark.sql.Dataset.getRows(Dataset.scala:255)
at org.apache.spark.sql.Dataset.showString(Dataset.scala:292)
at org.apache.spark.sql.Dataset.show(Dataset.scala:746)
at org.apache.spark.sql.Dataset.show(Dataset.scala:705)
at xxx.MyClass.xxx(MyClass.java:25)
我已经尝试在几个在线编辑器中打开 JSON 文档并且它是有效的。
这是我的代码:
Dataset<Row> df = spark.read()
.format("json")
.load("file.json");
df.show(3); // this is line 25
我正在使用 Java 8 和 Spark 2.4。
解决方案
该_corrupt_record
列是 Spark 在尝试摄取格式错误的记录时存储它们的位置。这可能是一个暗示。
Spark 还处理两种 JSON 文档,JSON Lines 和普通 JSON(在早期版本中,Spark 只能处理 JSON Lines)。您可以在这篇Manning 文章中找到更多信息。
您可以尝试该multiline
选项,如下所示:
Dataset<Row> df = spark.read()
.format("json")
.option("multiline", true)
.load("file.json");
看看它是否有帮助。如果没有,请分享您的 JSON 文档(如果可以)。
推荐阅读
- php - 在 laravel 中设置时覆盖个人访问令牌过期
- javascript - 为什么回调没有返回浏览器上的调用 API
- python-3.x - 如何从python中的集合中打印随机变量
- angular - 如何在 Angular 应用程序中提供静态 gzip 压缩文件?
- angular - NPM INSTALL 在 Angular 项目中时出错
- javascript - 窗口 onbeforeunload 是否贬值?
- amazon-cloudformation - 参考从先前资源创建的 arn
- swift - 如何绘制线节点在相机中保持与 iPhone 中的 Measure App 相同的大小?
- excel - 如何防止 Excel 电子表格的免费分发
- react-native - 从反应原生打开外部应用程序