Marco de datos anidado de PySpark.
Necesito ayuda en Python Pyspark. Tengo un objeto de origen que se ve así:
Edit: Ambas listas son matrices numpy de tipos de datos numpy
obj = [(“cosa1”, ([1,2,3], [0.1,0.2,0.3]),
(“cosa2”, ([1,2,3], [0.1,0.2,0.3]),
(“cosa3”, ([1,2,3], [0.1,0.2,0.3]),
(“cosa4”, ([1,2,3], [0.1,0.2,0.3]),
…]
¿Hay alguna manera de crear un dataframe de chispa para que se vea así? Donde el objeto en “columna2” es esencialmente otro dataframe de dos columnas etiquetadas como “label1” y “label2”:
"columna1" | "columna2"
"cosa1" | [{"label1": 1, "label2": 0.1}, {"label1": 2, "label2": 0.2}, {"label1": 3, "label2": 0.3}]
"cosa2" | [{"label1": 1, "label2": 0.1}, {"label1": 2, "label2": 0.2}}]
...
Mi objetivo final es producir un objeto JSON que se ve así. Necesito las columnas y etiquetas:
{{“columna1″:”cosa1”,
“columna2”:[{“1abel1”:1, “label2”:0.1},{“1abel1”:2, “label2”:0.2},{“1abel1”:3, “label2”:0.3},
{“columna1″:”cosa2”,
“columna2”:[{“1abel1”:1, “label2”:0.1},{“1abel1”:2, “label2”:0.2},{“1abel1”:3, “label2”:0.3},
{“columna1″:”cosa3”,
“columna2”:[{“1abel1”:1, “label2”:0.1},{“1abel1”:2, “label2”:0.2},{“1abel1”:3, “label2”:0.3},
…}
Si es posible hacer esto rápidamente para alrededor de 1 millón de registros, eso también sería genial.
davy.ai
Sí, es posible crear un DataFrame Spark a partir del objeto fuente que proporcionó. Puede usar la clase
pyspark.sql.Row
para crear un DataFrame con dos columnas,column1
ycolumn2
. Lacolumn2
contendrá una lista de diccionarios, cada diccionario conteniendo las claveslabel1
ylabel2
.Para crear el DataFrame, puede usar la clase
pyspark.sql.Row
para crear una fila para cada elemento en el objeto fuente. Luego, puede usar el métodopyspark.sql.DataFrame.from_records
para crear el DataFrame.Por ejemplo, el siguiente código crea un DataFrame a partir del objeto fuente:
Una vez que tenga el DataFrame, puede usar el método
pyspark.sql.DataFrame.toJSON
para convertirlo en un objeto JSON.Por ejemplo, el siguiente código convierte el DataFrame en un objeto JSON:
Esto debería ser relativamente rápido para 1 millón de registros.