PySpark sqlContext JSON consulta todos los valores de una matriz

Actualmente tengo un archivo json que estoy intentando consultar con sqlContext.sql () que se parece a esto:

{ "sample": { "persons": [ { "id": "123", }, { "id": "456", } ] } } 

Si solo quiero el primer valor escribo:

 sqlContext.sql("SELECT sample.persons[0] FROM test") 

pero quiero todos los valores de “personas” sin tener que escribir un bucle. Los bucles simplemente consumen demasiada potencia de procesamiento y, dado el tamaño de estos archivos, eso no sería práctico.

Pensé que sería capaz de poner un rango en los corchetes [] pero no puedo encontrar ninguna syntax para hacerlo.

Si su esquema se ve así:

 root |-- sample: struct (nullable = true) | |-- persons: array (nullable = true) | | |-- element: struct (containsNull = true) | | | |-- id: string (nullable = true) 

y desea acceder a structs individuales desde la matriz de persons todo lo que tiene que hacer es explotarlo:

 from pyspark.sql.functions import explode df.select(explode("sample.persons").alias("person")).select("person.id") 

Vea también: Consultar Spark SQL DataFrame con tipos complejos