【发布时间】:2021-02-25 03:08:10
【问题描述】:
我有一个由两列 C1 和 C2 组成的数据集。这些列与多对多关系相关联。
我想做的是为每个 C2 找到与整体 C2 值关联最多的值 C1。
例如:
C1 | C2
1 | 2
1 | 5
1 | 9
2 | 9
2 | 8
我们可以在这里看到 1 与 C2 的 3 个值匹配,而 2 与 2 匹配,所以我想作为输出:
Out1 |Out2| matches
2 | 1 | 3
5 | 1 | 3
9 | 1 | 3 (1 wins because 3>2)
8 | 2 | 2
到目前为止我所做的是:
dataset = sc.textFile("...").\
map(lambda line: (line.split(",")[0],list(line.split(",")[1]) ) ).\
reduceByKey(lambda x , y : x+y )
这是为每个 C1 值收集所有 C2 匹配项,此列表的计数是我们想要的匹配列。我现在想要的是以某种方式将此列表中的每个值用作新键并具有如下映射:
(Key ,Value_list[value1,value2,...]) -->(value1 , key ),(value2 , key)...
如何使用 spark 来做到这一点?任何建议都会很有帮助。
提前致谢!
【问题讨论】:
标签: apache-spark pyspark