pyspark中两个DataFrames列之间的差异

Aka*_*all 5 apache-spark-sql pyspark

我正在寻找一种方法来找到值的差异,在两个DataFrame的列中.例如:

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"])
Run Code Online (Sandbox Code Playgroud)

DataFrame A:

+----+---+
|name| id|
+----+---+
|   a|  3|
|   b|  5|
|   c|  7|
+----+---+
Run Code Online (Sandbox Code Playgroud)

DataFrame B:

+----+---+
|name| id|
+----+---+
|   a|  3|
|   b| 10|
|   c| 13|
+----+---+
Run Code Online (Sandbox Code Playgroud)

我的目标是在A中但不在B中listid列元素,例如:[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))
Run Code Online (Sandbox Code Playgroud)

但是,有没有一个简单的解决方案可以通过DataFrame操作获得,除了最终的收集?

Dav*_*vid 14

使用该subtract功能

df_a.select('id').subtract(df_b.select('id')).collect()
Run Code Online (Sandbox Code Playgroud)