es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 y column2. La column2 contendrá una lista de diccionarios, cada diccionario conteniendo las claves label1 y label2.

    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étodo pyspark.sql.DataFrame.from_records para crear el DataFrame.

    Por ejemplo, el siguiente código crea un DataFrame a partir del objeto fuente:

    from pyspark.sql import Row
    
    # Crear una lista de filas a partir del objeto fuente
    rows = [Fila(column1=obj[0], column2=[{'label1': obj[1][0][i], 'label2': obj[1][1][i]} para i in range(len(obj[1][0]))]) para obj en source_object]
    
    # Crear el DataFrame a partir de la lista de filas
    df = chispa.createDataFrame(rows)
    

    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:

    json_object = df.toJSON().collect()
    

    Esto debería ser relativamente rápido para 1 millón de registros.

Comments are closed.