如何解决Spark Dataframe数据中的传递相关性
我有一个以下格式的spark数据框。
pid grouped_ids
------------------------
12 12,13,14,78
6 6,8,12,23
19 19
4 4,5
8 8,14
pid 是grouped_id的最小值。 这里的基本问题是,我们需要通过解决传递相关性,为grouped_ids列中的每个元素找到最小pid 。 因此,在上面的示例中,第5行与第2行相关,因为第2行和第5行中存在8。同样,由于row2中的12存在于row1中,因此row2与row1相关。因此,在解决传递链之后,最终输出将如下所示:
pid grouped_ids
------------------------
6 6,3,78
19 19
4 4,5
我最初的想法是收集所有分组并进行嵌套循环。像
myDataFrame.groupBy("1")
.agg(collect_list.......)
.as[case_class]
.flatMap(allRows=>{
... here we have all the rows in form of case class. Now it comes down to plain Scala for processing
})
一旦我们有了所有行,基本上是每个pid,就循环遍历所有grouped_id,如果组中的任何一个存在pid,则为与该组匹配的每个元素递归地找到最小的pid。我认为这将适用于小型数据集。但是我有大约3000万的庞大数据集。因此,由于它基本上是N ^ 2,并且要把数据收集到单个jvm中,所以要花很多时间。
如果能够更轻松地解决上述问题,我可以按如下所示将上述链解构到每一行。
pid gid
------------------------
12 13
12 14
12 78
6 8
6 12
6 23
19 19
4 5
8 14
任何想法都会受到赞赏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。