Error extraño al analizar JSON en Apache Spark

Intentar analizar un documento JSON y Spark me da un error:

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)

Ya intenté abrir el documento JSON en varios editores en línea y es válido.

Este es mi código:

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

df.show(3); // this is line 25

Estoy usando Java 8 y Spark 2.4.

Respuesta 1

La _corrupt_recordcolumna es donde Spark almacena registros con formato incorrecto cuando intenta ingerirlos. Eso podría ser una pista.

Spark también procesa dos tipos de documentos JSON, JSON Lines y JSON normal (en las versiones anteriores, Spark solo podía hacer JSON Lines). Puede encontrar más en este artículo de Manning .

Puedes probar la multilineopción, como en:

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

para ver si ayuda Si no, comparte tu documento JSON (si puedes).

Respuesta: 2

Estoy tratando de permitir que un cliente (android) se comunique con un servidor. El cliente de envío de datos -> servidor funciona bien, pero quiero que el servidor responda. El código del lado del cliente es: pruebe {Socket s = new ...

Mi contraseña original para el almacén de claves de Android es 123, cuando cambié a abc usando el comando keytool -storepasswd -keystore my.keystore Ahora, cuando exporto la aplicación usando Eclipse, descubrí que el primero ...

Utilizo una imagen como pantalla de inicio agregando la siguiente línea: SplashScreen-Image: com / package1 / splashimage.png al archivo manifest.mf, que requiere que mi splashimage.png se incluya en el ...

Estoy tratando de configurar un HttpClient a través de HttpClientBuilder. También eché un vistazo al HttpClientConnectionManager y aquí comenzó la confusión. En ConnectionManager o más exactamente el ...