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.

La unión devuelve un conjunto de datos – Spark 3.1.2

Hay dos dataframes, mergeDF_A y mergeDF_B. La acción de unión siguiente está devolviendo un conjunto de datos en lugar de un dataframe. ¿Por qué está devolviendo un conjunto de datos? ¿Y cómo obtener un dataframe?

val finalMergeDF = mergeDF_A.union(mergeDF_B).distinct()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La acción de unión está devolviendo un conjunto de datos en lugar de un dataframe porque, al realizar una unión en dos dataframes, la estructura resultante puede tener columnas en diferentes órdenes, lo que conduce a un esquema no resuelto. Como resultado, Spark convierte la estructura resultante en un conjunto de datos para resolver el esquema antes de devolverlo.

    Para obtener un dataframe, puedes seleccionar las columnas del conjunto de datos unido y convertirlas al tipo de datos apropiado, o especificar explícitamente el esquema del dataframe final utilizando la clase “StructType”. Aquí tienes un ejemplo:

    import org.apache.spark.sql.types.StructType
    import org.apache.spark.sql.functions.col
    
    val finalSchema = StructType(Seq(
      mergeDF_A.schema.fields.head,
      mergeDF_A.schema.fields(1),
      mergeDF_A.schema.fields(2)
    ))
    
    val finalMergeDF = mergeDF_A.union(mergeDF_B)
                          .select(finalSchema.fields.map(col): _*)
                          .distinct()
    

    En este ejemplo, estamos creando un nuevo esquema del dataframe final extrayendo el esquema de uno de los dataframes de entrada (“mergeDF_A”) y convirtiéndolo a los tipos de datos deseados. Luego, utilizamos este esquema para convertir el conjunto de datos unido en un nuevo dataframe utilizando la operación select.

Comments are closed.