web-dev-qa-db-fra.com

Joindre deux DataFrames dans Spark SQL et sélection de colonnes d'une seule

J'ai deux DataFrames dans Spark SQL (D1 et D2).

J'essaye de joindre intérieurement les deux D1.join(D2, "some column") et de récupérer les données de seulement D1, pas l'ensemble de données complet.

Les deux D1 et D2 ont les mêmes colonnes.

Quelqu'un pourrait-il m'aider à ce sujet?

J'utilise Spark 1.6.

14
Avi

Supposons que vous souhaitiez rejoindre la colonne "id". Ensuite, vous pourriez écrire:

val sqlContext = new org.Apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._    
d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id").select($"d1.*")
41
cheseaux

Comme réponse alternative, vous pouvez également effectuer les opérations suivantes sans ajouter d'alias:

d1.join(d2, d1("id") === d2("id"))
  .select(d1.columns.map(c => d1(c)): _*)
7
nsanglar

Vous pouvez utiliser left_semi:

d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id", "left_semi")

La semi-jointure prend uniquement les colonnes de l'ensemble de données de gauche où la condition de jointure est remplie.

3