метод данных pyspark subtract
должен дать вам то, что вы хотите. См. Spark: вычтите два DataFrames для получения более подробной информации.
Использование exceptAll
не даст желаемых результатов, так как оно сохранит вторую запись dog
в df1
, потому что exceptAll
сохраняет дубликаты.
С учетом ваших фреймов данных:
df1 = spark.createDataFrame([{'id': 1, 'A': 'dog'},
{'id': 2, 'A': 'cat'},
{'id': 3, 'A': 'dog'}])
df2 = spark.createDataFrame([{'id': 4, 'A': 'dog'},
{'id': 5, 'A': 'elmo'}])
Используйте subtract
в интересующем столбце (т. Е. A
), затем объедините результаты обратно в исходный фрейм данных, чтобы получить остальные столбцы (т. е. id
).
except_df = df1.select('A').subtract(df2.select('A'))
except_df.join(df1, on='A').show()
+---+---+
| A| id|
+---+---+
|cat| 2|
+---+---+