【问题标题】:How to implement `except` in Apache Spark based on subset of columns?如何基于列的子集在 Apache Spark 中实现“除外”?
【发布时间】:2018-08-07 12:50:09
【问题描述】:

我正在使用 spark 中的两个模式,table1table2

scala> table1.printSchema
root
 |-- user_id: long (nullable = true)
 |-- item_id: long (nullable = true)
 |-- value: double (nullable = true)

scala> table2.printSchema
root
 |-- item_id: long (nullable = true)
 |-- user_id: long (nullable = true)
 |-- value: double (nullable = true)

但是,我从不同的来源创建了这两个。基本上,它们中的每一个都持有 (user_id, item_id) 对的 value 信息,这是一种浮点数据类型,因此容易出现浮点错误。例如,一个表中的 (1, 3, 4) 由于其他计算,可以在另一个表中存储为 (1, 3, 3.9998..)。

我需要从table1 中删除带有 (user_id, item_id) 对(保证成对唯一)的行,这些行也存在于table2 中。像这样的:

scala> table1.except(table2)

但是,除了何时确定两行相同之外,没有其他方法可以判断,在这种情况下就是(user_iditem_id)。我需要忽略value

如何使用 spark-sql 做到这一点?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    使用 leftanti join 将是一个可能的解决方案。这将从左表中删除存在于给定键的右表中的行。

    table1.join(table2, Seq("user_id", "item_id"), "leftanti")
    

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 2015-05-03
      • 1970-01-01
      • 2021-09-07
      • 2018-12-25
      • 2018-12-28
      • 2023-02-01
      • 2013-05-19
      • 1970-01-01
      相关资源
      最近更新 更多