2016-07-13 6 views
1

Я ищу способ найти разницу в значениях, в столбцах двух DataFrame, например:Разница между двумя DataFrames колоннами в pypark

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"]) 

DataFrame A:

+ ---- + --- +

|name| id| 
+----+---+ 
| a| 3| 
| b| 5| 
| c| 7| 
+----+---+ 

DataFrame Б:

+----+---+ 
|name| id| 
+----+---+ 
| a| 3| 
| b| 10| 
| c| 13| 
+----+---+ 

Моя цель list из id элементов столбца, которые находятся в A, но не в B, например: [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)) 

Но есть простое решение, которое может быть получено только с DataFrame операций, за исключением, возможно, окончательное Collect.

ответ

3

Используйте subtract функцию

df_a.select('id').subtract(df_b.select('id')).collect() 
+0

Действительно полезно, спасибо. – Akavall

Смежные вопросы