在Apache Spark中解析JSON时出现奇怪的错误

时间:2019-02-04 14:00:25

标签: java json apache-spark

尝试解析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。

2 个答案:

答案 0 :(得分:0)

_corrupt_record列中,Spark尝试提取格式错误的记录时会在其中存储它们。这可能是一个提示。

Spark还处理两种类型的JSON文档,即JSON Lines和常规JSON(在早期版本中,Spark只能执行JSON Lines)。您可以在此Manning article中找到更多内容。

您可以尝试使用multiline选项,如下所示:

Dataset<Row> df = spark.read()
    .format("json")
    .option("multiline", true)
    .load("file.json");

查看是否有帮助。如果没有,请共享您的JSON文档(如果可以)。

答案 1 :(得分:-1)

将多行选项设置为true。如果不起作用,请共享您的json