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.
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.*")
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)): _*)
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.