Scala - 根据另一个 DF 中的事务为每个 ID 过滤 DF 中的数据
Scala - Filter data in DF for each ID based on the transactions in another DF
问题概述:
- 数据集 1:用户将有多行与某个交易 ID 相关联
- 数据集 2:每个用户都有一行与数据库中的每个交易 ID 相关联
- 我想做的是删除用户在数据集 1 中拥有的数据集 2 中的任何事务。
示例:
数据集 1:
id trans_id
1 a
1 b
1 c
2 c
2 d
2 e
2 f
数据集 2:
id trans_id score
1 a 0.3
1 b 0.4
1 c 0.5
1 d 0.1
1 e 0.2
1 f 0.5
2 a 0.1
2 b 0.5
2 c 0.6
2 d 0.8
2 e 0.9
2 f 0.2
最终数据集:
id trans_id score
1 d 0.1
1 e 0.2
1 f 0.5
2 a 0.1
2 b 0.5
我正在尝试在 scala 中执行此操作(python 是我选择的语言)但我有点迷路了。如果我只使用一个 ID,我可以使用 isin
函数,但我不确定如何为所有 ID 执行此操作。
如有任何帮助,我们将不胜感激。
最简单的方法可能是使用 left_anti
连接:
val df1 = Seq(
(1, "a"), (1, "b"), (1, "c"),
(2, "c"), (2, "d"), (2, "e"), (2, "f")
).toDF("id", "trans_id")
val df2 = Seq(
(1, "a", 0.3), (1, "b", 0.4), (1, "c", 0.5), (1, "d", 0.1), (1, "e", 0.2), (1, "f", 0.5),
(2, "a", 0.1), (2, "b", 0.5), (2, "c", 0.6), (2, "d", 0.8), (2, "e", 0.9), (2, "f", 0.2)
).toDF("id", "trans_id", "score")
df2.join(df1, Seq("id", "trans_id"), "left_anti").show
// +---+--------+-----+
// | id|trans_id|score|
// +---+--------+-----+
// | 1| d| 0.1|
// | 1| e| 0.2|
// | 1| f| 0.5|
// | 2| a| 0.1|
// | 2| b| 0.5|
// +---+--------+-----+
问题概述:
- 数据集 1:用户将有多行与某个交易 ID 相关联
- 数据集 2:每个用户都有一行与数据库中的每个交易 ID 相关联
- 我想做的是删除用户在数据集 1 中拥有的数据集 2 中的任何事务。
示例:
数据集 1:
id trans_id
1 a
1 b
1 c
2 c
2 d
2 e
2 f
数据集 2:
id trans_id score
1 a 0.3
1 b 0.4
1 c 0.5
1 d 0.1
1 e 0.2
1 f 0.5
2 a 0.1
2 b 0.5
2 c 0.6
2 d 0.8
2 e 0.9
2 f 0.2
最终数据集:
id trans_id score
1 d 0.1
1 e 0.2
1 f 0.5
2 a 0.1
2 b 0.5
我正在尝试在 scala 中执行此操作(python 是我选择的语言)但我有点迷路了。如果我只使用一个 ID,我可以使用 isin
函数,但我不确定如何为所有 ID 执行此操作。
如有任何帮助,我们将不胜感激。
最简单的方法可能是使用 left_anti
连接:
val df1 = Seq(
(1, "a"), (1, "b"), (1, "c"),
(2, "c"), (2, "d"), (2, "e"), (2, "f")
).toDF("id", "trans_id")
val df2 = Seq(
(1, "a", 0.3), (1, "b", 0.4), (1, "c", 0.5), (1, "d", 0.1), (1, "e", 0.2), (1, "f", 0.5),
(2, "a", 0.1), (2, "b", 0.5), (2, "c", 0.6), (2, "d", 0.8), (2, "e", 0.9), (2, "f", 0.2)
).toDF("id", "trans_id", "score")
df2.join(df1, Seq("id", "trans_id"), "left_anti").show
// +---+--------+-----+
// | id|trans_id|score|
// +---+--------+-----+
// | 1| d| 0.1|
// | 1| e| 0.2|
// | 1| f| 0.5|
// | 2| a| 0.1|
// | 2| b| 0.5|
// +---+--------+-----+