Gauche Anti rejoindre Étincelle?

J'ai défini deux tables comme ceci:

 val tableName = "table1"
val tableName2 = "table2"
val format = new SimpleDateFormat("yyyy-MM-dd")
val data = List(
List("mike", 26, true),
List("susan", 26, false),
List("john", 33, true)
)
val data2 = List(
List("mike", "grade1", 45, "baseball", new java.sql.Date(format.parse("1957-12-10").getTime)),
List("john", "grade2", 33, "soccer", new java.sql.Date(format.parse("1978-06-07").getTime)),
List("john", "grade2", 32, "golf", new java.sql.Date(format.parse("1978-06-07").getTime)),
List("mike", "grade2", 26, "basketball", new java.sql.Date(format.parse("1978-06-07").getTime)),
List("lena", "grade2", 23, "baseball", new java.sql.Date(format.parse("1978-06-07").getTime))
)
val rdd = sparkContext.parallelize(data).map(Row.fromSeq(_))
val rdd2 = sparkContext.parallelize(data2).map(Row.fromSeq(_))
val schema = StructType(Array(
StructField("name", StringType, true),
StructField("age", IntegerType, true),
StructField("isBoy", BooleanType, false)
))
val schema2 = StructType(Array(
StructField("name", StringType, true),
StructField("grade", StringType, true),
StructField("howold", IntegerType, true),
StructField("hobby", StringType, true),
StructField("birthday", DateType, false)
))
val df = sqlContext.createDataFrame(rdd, schema)
val df2 = sqlContext.createDataFrame(rdd2, schema2)
df.createOrReplaceTempView(tableName)
df2.createOrReplaceTempView(tableName2)

Je suis en train de construire une requête pour renvoyer les lignes de la table table1 qui n'ont pas de ligne correspondante dans la table2.
J'ai essayé de le faire en utilisant cette requête:

Select * from table1 LEFT JOIN table2 ON table1.name = table2.name AND table1.age = table2.howold AND table2.name IS NULL AND table2.howold IS NULL

mais cela me donne toutes les lignes de la table table1:

Liste({"nom":"jean","age":33,"isBoy":true},
{"name":"susan","age":26,"isBoy":false},
{"name":"mike","age":26,"isBoy":true})

Comment faire ce type de jointure dans Spark efficacement?

Je suis à la recherche pour une requête SQL car j'ai besoin d'être en mesure de spécifier les colonnes à comparer entre les deux tables, et pas seulement de comparer, ligne par ligne, comme cela se fait dans d'autres questions recommandées. Comme l'utilisation de soustraire, à l'exception etc.

Double Possible de Spark: soustraire deux DataFrames
en fonction de votre modifier et commenter ma réponse, je pense que vous êtes à la recherche de: stackoverflow.com/questions/29537564/... notamment le commentaire de @Interfector sur la première réponse
RDD#cogroup devrait fonctionner

OriginalL'auteur sergeda | 2017-04-03