Cómo cargar el directorio de archivos JSON en Apache Spark en Python

Soy relativamente nuevo en Apache Spark, y quiero crear un solo RDD en Python a partir de listas de diccionarios que se guardan en varios archivos JSON (cada uno está comprimido y contiene una lista de diccionarios). El RDD resultante entonces, en términos generales, contendría todas las listas de diccionarios combinados en una sola lista de diccionarios. No he podido encontrar esto en la documentación ( https://spark.apache.org/docs/1.2.0/api/python/pyspark.html ), pero si me lo perdí, hágamelo saber.

Hasta ahora he intentado leer los archivos JSON y crear la lista combinada en Python, luego usar sc.parallelize (), sin embargo, el conjunto de datos completo es demasiado grande para caber en la memoria, por lo que no es una solución práctica. Parece que Spark tendría una forma inteligente de manejar este caso de uso, pero no lo conozco.

¿Cómo puedo crear un solo RDD en Python que incluya las listas en todos los archivos JSON?

También debo mencionar que no quiero usar Spark SQL. Me gustaría usar funciones como mapa, filtro, etc., si eso es posible.

Siguiendo lo que tgpfeiffer mencionó en su respuesta y comentario, esto es lo que hice.

Primero, como mencionaron, los archivos JSON tenían que formatearse para que tuvieran un diccionario por línea en lugar de una sola lista de diccionarios. Entonces, fue tan simple como:

my_RDD_strings = sc.textFile(path_to_dir_with_JSON_files) my_RDD_dictionaries = my_RDD_strings.map(json.loads) 

Si hay una forma mejor o más eficiente de hacerlo, hágamelo saber, pero esto parece funcionar.

Puede usar sqlContext.jsonFile () para obtener un SchemaRDD (que es un RDD [Fila] más un esquema) que luego se puede usar con Spark SQL. O vea Cargar el conjunto de datos JSON en Spark, luego use filtro, mapa, etc. para una tubería de procesamiento que no sea de SQL. Creo que es posible que tenga que descomprimir los archivos, y también Spark solo puede trabajar con archivos en los que cada línea sea un único documento JSON (es decir, no es posible que haya objetos de varias líneas).

Puede cargar un directorio de archivos en un solo RDD usando textFile y también admite comodines. Eso no te daría nombres de archivos, pero no parece que los necesites.

Puede usar Spark SQL mientras usa transformaciones básicas como mapas, filtros, etc. SchemaRDD también es un RDD (en Python, así como Scala)

Para cargar la lista de Json de un archivo como RDD :

 def flat_map_json(x): return [each for each in json.loads(x[1])] rdd = sc.wholeTextFiles('example.json').flatMap(flat_map_json)