我正在寻找一种方法来查找两个数据帧的列中的值差异。例如:
from pyspark.sql import SQLContext
sc = SparkContext()
sql_context = SQLContext(sc)
df_a = sql_context.createDataFrame([("a", 3), ("b", 5), ("c", 7)], ["name", "id"])
df_b = sql_context.createDataFrame([("a", 3), ("b", 10), ("c", 13)], ["name", "id"])
数据帧 A:
+----+---+
|name| id|
+----+---+
| a| 3|
| b| 5|
| c| 7|
+----+---+
数据帧 B:
+----+---+
|name| id|
+----+---+
| a| 3|
| b| 10|
| c| 13|
+----+---+
我的目标是list
A 中但不在 B 中的id
列元素,例如:[5, 7]
.我正在考虑在id
上做一个连接,但我看不到一个好的方法。
朴素的解决方案可能是:
list_a = df_a.select("id").rdd.map(lambda x: x.asDict()["id"]).collect()
list_b = df_b.select("id").rdd.map(lambda x: x.asDict()["id"]).collect()
result = list(set(list_a).difference(list_b))
但是,除了最终收集之外,是否有一个简单的解决方案可以仅通过数据帧操作获得?
使用 subtract
函数
df_a.select('id').subtract(df_b.select('id')).collect()