Saltar al contenido

¿Cómo fusionar dos columnas de un `Dataframe` en Spark en una 2-Tupla?

Este grupo especializado luego de días de investigación y de recopilar de datos, dimos con los datos necesarios, queremos que te resulte útil en tu plan.

Solución:

Puedes usar struct función que crea una tupla de columnas proporcionadas:

import org.apache.spark.sql.functions.struct

val df = Seq((1,2), (3,4), (5,3)).toDF("a", "b")
df.withColumn("NewColumn", struct(df("a"), df("b")).show(false)

+---+---+---------+
|a  |b  |NewColumn|
+---+---+---------+
|1  |2  |[1,2]    |
|3  |4  |[3,4]    |
|5  |3  |[5,3]    |
+---+---+---------+

Puede utilizar una función definida por el usuario udf para lograr lo que quieres.

definición de FDU

object TupleUDFs 
  import org.apache.spark.sql.functions.udf      
  // type tag is required, as we have a generic udf
  import scala.reflect.runtime.universe.TypeTag, typeTag

  def toTuple2[S: TypeTag, T: TypeTag] = 
    udf[(S, T), S, T]((x: S, y: T) => (x, y))

Uso

df.withColumn(
  "tuple_col", TupleUDFs.toTuple2[Int, Int].apply(df("a"), df("b"))
)

asumiendo que “a” y “b” son las columnas de tipo Int quieres poner una tupla.

Puede fusionar múltiples columnas de marco de datos en una usando array.

// $"*" will capture all existing columns
df.select($"*", array($"col1", $"col2").as("newCol")) 

Comentarios y puntuaciones de la guía

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *