Unir dataframes en Scala

por | Sep 5, 2018 | Big data, Scala, Spark | 1 Comentario

Ejemplo: Unir tablasscala logo

Unir tablas que tenga el identificador comun

val df_personas = Seq(
  (1,"Paco","Garcia",24,24000),
  (2,"Juan","Garcia",26,27000),
  (3,"Lola","Martin",29,31000),
  (4,"Sara","Garcia",35,34000)
).toDF("id","nombre", "apellido","edad","salario")

val df_gustos = Seq(
  (1,"Rojo","Pasta"),
  (2,"Amarillo","Pizza"),
  (3,"Azul","Patatas"),
  (5,"Rojo","Pizza"),
  (6,"Negro","Pulpo")
).toDF("id", "color","comida")


df_personas
    .join(df_gustos, "id")
    .select("nombre", "edad", "color", "comida")
    .show()
+------+----+--------+-------+
|nombre|edad|   color| comida|
+------+----+--------+-------+
|  Paco|  24|    Rojo|  Pasta|
|  Juan|  26|Amarillo|  Pizza|
|  Lola|  29|    Azul|Patatas|
+------+----+--------+-------+

 

Ejemplo: Unir tablas especificando los identificadores de unión

Unir tablas que tenga especificando el identificador

df_personas
 .join(df_gustos, df_gustos("id") === df_personas("id"))
 .show()

df_personas
    .join(df_gustos, Seq("id"), "inner")
    .show()
+---+------+--------+----+-------+---+--------+-------+
| id|nombre|apellido|edad|salario| id|   color| comida|
+---+------+--------+----+-------+---+--------+-------+
|  1|  Paco|  Garcia|  24|  24000|  1|    Rojo|  Pasta|
|  2|  Juan|  Garcia|  26|  27000|  2|Amarillo|  Pizza|
|  3|  Lola|  Martin|  29|  31000|  3|    Azul|Patatas|
+---+------+--------+----+-------+---+--------+-------+

 

Ejemplo: Unir tablas por la derecha

df_personas
    .join(df_gustos, Seq("id"), "left_outer")
    .show()
+---+------+--------+----+-------+----+--------+-------+
| id|nombre|apellido|edad|salario|  id|   color| comida|
+---+------+--------+----+-------+----+--------+-------+
|  1|  Paco|  Garcia|  24|  24000|   1|    Rojo|  Pasta|
|  2|  Juan|  Garcia|  26|  27000|   2|Amarillo|  Pizza|
|  3|  Lola|  Martin|  29|  31000|   3|    Azul|Patatas|
|  4|  Sara|  Garcia|  35|  34000|null|    null|   null|
+---+------+--------+----+-------+----+--------+-------+

 

Ejemplo: Unir tablas por la izquierda

df_personas
    .join(df_gustos, Seq("id"), "right_outer")
    .show()
+----+------+--------+----+-------+---+--------+-------+
|  id|nombre|apellido|edad|salario| id|   color| comida|
+----+------+--------+----+-------+---+--------+-------+
|   1|  Paco|  Garcia|  24|  24000|  1|    Rojo|  Pasta|
|   2|  Juan|  Garcia|  26|  27000|  2|Amarillo|  Pizza|
|   3|  Lola|  Martin|  29|  31000|  3|    Azul|Patatas|
|null|  null|    null|null|   null|  5|    Rojo|  Pizza|
|null|  null|    null|null|   null|  6|   Negro|  Pulpo|
+----+------+--------+----+-------+---+--------+-------+


Ejemplo: Añadir filas a una tabla

var df_personas1 = Seq(
  (1,"Paco","Garcia"),
  (2,"Lucia","Garcia"),
  (4,"Sara","Garcia")
).toDF("id","nombre", "apellido")

val df_personas2 = Seq(
  (1,"Andres","García"),
  (2,"Sara","Montes")
).toDF("id","nombre", "apellido")


df_personas1 = df_personas1.union(df_personas2)

df_personas1.show()
+---+------+--------+
| id|nombre|apellido|
+---+------+--------+
|  1|  Paco|  Garcia|
|  2| Lucia|  Garcia|
|  4|  Sara|  Garcia|
|  1|Andres|  García|
|  2|  Sara|  Montes|
+---+------+--------+

1 Comentario

  1. ignacio

    Primero que nada tu pagina esta excelente para uno que va iniciando en scala. Super completa.
    Sobre el el ejemplo Ejemplo: «Añadir filas a una tabla», veo que es como el union all del sql en vez de añadir registros a una tabla, es mi humilde sugerencia, saludos,

    Responder

Enviar un comentario

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