gpt4 book ai didi

join - Spark 数据帧 reduceByKey

转载 作者:行者123 更新时间:2023-11-30 23:52:29 24 4
gpt4 key购买 nike

我正在使用 Spark 1.5/1.6,我想在 DataFrame 中执行 reduceByKey 操作,我不想将 df 转换为 rdd。

每行看起来像,我有多个 id1 行。

id1, id2, score, time

我想要这样的东西:

id1, [ (id21, score21, time21) , ((id22, score22, time22)) , ((id23, score23, time23)) ]

所以,对于每个“id1”,我想要一个列表中的所有记录

顺便说一句,不想将 df 转换为 rdd 的原因是因为我必须将这个(减少的)数据帧连接到另一个数据帧,并且我正在对连接键进行重新分区,这使得速度更快,我猜 rdd 不能做同样的事情

我们将不胜感激。

最佳答案

为了简单地保留已经实现的分区,然后在 reduceByKey 调用中重新使用父 RDD 分区器:

 val rdd = df.toRdd
val parentRdd = rdd.dependencies(0) // Assuming first parent has the
// desired partitioning: adjust as needed
val parentPartitioner = parentRdd.partitioner
val optimizedReducedRdd = rdd.reduceByKey(parentPartitioner, reduceFn)

如果您按如下方式指定分区程序:

 df.toRdd.reduceByKey(reduceFn)  // This is non-optimized: uses full shuffle

然后会发生您注意到的行为 - 即发生完全随机播放。这是因为将使用 HashPartitioner

关于join - Spark 数据帧 reduceByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37307228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com