_corrupt_record error al leer un archivo JSON en Spark

Tengo este archivo JSON

{ "a": 1, "b": 2 } 

que se ha obtenido con el método Python json.dump. Ahora, quiero leer este archivo en un DataFrame en Spark, usando pyspark. Siguiendo la documentación, estoy haciendo esto.

sc = SparkContext ()

sqlc = SQLContext (sc)

df = sqlc.read.json (‘my_file.json’)

imprimir df.show ()

La statement impresa escupe esto sin embargo:

 +---------------+ |_corrupt_record| +---------------+ | {| | "a": 1, | | "b": 2| | }| +---------------+ 

¿Alguien sabe qué está pasando y por qué no está interpretando el archivo correctamente?

Debe tener un objeto json por fila en su archivo de entrada, consulte http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader.json

Si su archivo json se ve así, le dará el dataframe esperado:

 { "a": 1, "b": 2 } { "a": 3, "b": 4 } .... df.show() +---+---+ | a| b| +---+---+ | 1| 2| | 3| 4| +---+---+ 

Si desea dejar su archivo JSON como está (sin multiLine=True caracteres de las nuevas líneas \n ), incluya multiLine=True argumento de palabra clave multiLine=True

 sc = SparkContext() sqlc = SQLContext(sc) df = sqlc.read.json('my_file.json', multiLine=True) print df.show() 

Añadiendo a la gran respuesta de @Bernhard

 # original file was written with pretty-print inside a list with open("pretty-printed.json") as jsonfile: js = json.load(jsonfile) # write a new file with one object per line with open("flattened.json", 'a') as outfile: for d in js: json.dump(d, outfile) outfile.write('\n') 

En Spark 2.2+ puede leer el archivo json de multilínea usando el siguiente comando.

 val dataframe = spark.read.option("multiline",true).json( " filePath ") 

si hay un objeto json por línea entonces,

 val dataframe = spark.read.json(filepath)