Unir dataframes en Scala

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|
+----+------+--------+----+-------+---+--------+-------+

Otros artículos que pueden ser de interés:

Autor: Diego Calvo