Странная ошибка при разборе JSON в Apache Spark - PullRequest
0 голосов
/ 04 февраля 2019

Пытается разобрать документ 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 голосов
/ 15 апреля 2019

установить для параметра мультилинии значение true.Если это не работает, поделитесь своим JSON

0 голосов
/ 04 февраля 2019

Столбец _corrupt_record - это место, где Spark хранит искаженные записи, когда пытается их проглотить.Это может быть намек.

Spark также обрабатывает два типа документов JSON: JSON Lines и обычный JSON (в более ранних версиях Spark мог выполнять только JSON Lines).Вы можете найти больше в этой статье Мэннинга .

. Вы можете попробовать опцию multiline, например:

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

, чтобы посмотреть, поможет ли это.Если нет, поделитесь своим документом JSON (если можете).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...