【问题标题】:Difference between two DataFrames columns in pysparkpyspark 中两个 DataFrames 列之间的区别
【发布时间】:2016-11-16 12:18:24
【问题描述】:

我正在寻找一种方法来查找两个 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"])

数据帧 A:

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

数据帧 B:

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

我的目标是在 A 中但不在 B 中的 id 列元素中的 list,例如:[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 操作获得?

【问题讨论】:

    标签: pyspark apache-spark-sql


    【解决方案1】:

    使用subtract 函数

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

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2014-09-24
      • 2014-11-04
      • 2011-11-01
      • 1970-01-01
      相关资源
      最近更新 更多