Spark: soustraire deux DataFrames
Spark version 1.2.0 on pourrait utiliser subtract
avec 2 SchemRDD
s terminer avec seulement le contenu différent de la première
val onlyNewData = todaySchemaRDD.subtract(yesterdaySchemaRDD)
onlyNewData
contient les lignes de todaySchemRDD
qui n'existent pas dans yesterdaySchemaRDD
.
Comment cela peut-il être réalisé avec DataFrames
Spark version 1.3.0?
Vous devez vous connecter pour publier un commentaire.
Selon la les docs de l'api, en faisant:
sera de retour une nouvelle DataFrame contenant les lignes dans dataFrame1 mais pas dans dataframe2.
dataFrame1
lignes à l'exception de ceux où l'primary_key
n'apparaît pas dansdataFrame2
? (qui ressemble à unesubtractByKey
pour les Rdd, mais de préférence pour un dataframe.LEFT JOIN
couplé avec unIS NULL
sur la rejoint dataframe de la clé. Le sql pour ce qui est quelque chose comme:SELECT * FROM df1 LEFT JOIN df2 ON df1.id = df2.id WHERE df2.id IS NULL
LEFT ANTI
rejoindre.dataFrame1.join(dataFrame2, "key_col", "left_anti")
Dans pyspark DOCS il serait soustraire
subtract()
est disponible pour Python Étincelle du dataframe, mais la fonction n'existe pas pour Scala Étincelle du dataframe.J'ai essayé de soustraire, mais le résultat n'était pas conforme.
Si je lance
df1.subtract(df2)
, pas toutes les lignes de df1 sont affichés sur le résultat dataframe, probablement en raisondistinct
cité sur les docs.Cela a résolu mon problème:
df1.exceptAll(df2)
DataFrame(df1._jdf.exceptAll(df2._jdf), sqlContext)