【发布时间】:2019-12-18 11:22:55
【问题描述】:
我有一个 json 文件:
{
"a": {
"b": 1
}
}
我正在阅读它:
val path = "D:/playground/input.json"
val df = spark.read.json(path)
df.show()
但出现错误:
线程“主”org.apache.spark.sql.AnalysisException 中的异常: 从 Spark 2.3 开始,不允许来自原始 JSON/CSV 文件的查询 当引用的列仅包含内部损坏记录时 列(默认命名为 _corrupt_record)。例如: spark.read.schema(schema).json(file).filter($"_corrupt_record".isNotNull).count() 和 spark.read.schema(schema).json(file).select("_corrupt_record").show()。 相反,您可以缓存或保存解析的结果,然后发送 相同的查询。例如,val df = spark.read.schema(schema).json(file).cache() 然后 df.filter($"_corrupt_record".isNotNull).count().;
所以我尝试按照他们的建议缓存它:
val path = "D:/playground/input.json"
val df = spark.read.json(path).cache()
df.show()
但我不断收到同样的错误。
【问题讨论】:
-
错误清楚地表明问题在于您的 JSON 未正确读取。原因是 Spark 需要特定格式:“请注意,作为 json 文件提供的文件不是典型的 JSON 文件。每一行必须包含一个单独的、自包含的有效JSON 对象。” - documentation - 另外,在 read 方法的 Scaladoc 上,您可以看到在这种情况下很有用的
multiLine选项。 -
请查看link 了解更多信息和解决方案。
-
痛苦的问题解释得不好恕我直言。
-
@LuisMiguelMejíaSuárez 谢谢我不知道。现在它正在工作。请写下您的评论作为答案,我会接受。
标签: json scala apache-spark apache-spark-sql