gpt4 book ai didi

scala - 可以使用 reduceBykey 来更改类型和组合值 - Scala Spark?

转载 作者:行者123 更新时间:2023-12-01 09:24:29 30 4
gpt4 key购买 nike

在下面的代码中,我正在尝试组合值:

val rdd: org.apache.spark.rdd.RDD[((String), Double)] =
sc.parallelize(List(
(("a"), 1.0),
(("a"), 3.0),
(("a"), 2.0)
))

val reduceByKey = rdd.reduceByKey((a , b) => String.valueOf(a) + String.valueOf(b))

reduceByValue 应该包含 (a , 1,3,2) 但收到编译时错误:

Multiple markers at this line - type mismatch; found : String required: Double - type mismatch; found : String 
required: Double

什么决定了reduce函数的类型?不能转换类型吗?

我可以使用 groupByKey 来获得相同的结果,但只是想了解 reduceByKey

最佳答案

不,给定 RDD[(K,V)] 类型的 rdd,reduceByKey 将采用 (V,V) = 类型的关联函数> V

如果我们想应用一个归约,将值的类型更改为另一个任意类型,那么我们可以使用 aggregateByKey:

def aggregateByKey[U](zeroValue: U)(seqOp: (U, V) ⇒ U, combOp: (U, U) ⇒ U)

使用 zeroValueseqOp 函数,它在 map 端提供了类似折叠的操作,而关联函数 combOp 结合了seqOp 的结果到最终结果,就像 reduceByKey 一样。从签名中我们可以看出,虽然集合值是 V 类型,但 aggregateByKey 的结果将是任意类型 U

应用于上面的示例,aggregateByKey 将如下所示:

rdd.aggregateByKey("")({case (aggr , value) => aggr + String.valueOf(value)}, (aggr1, aggr2) => aggr1 + aggr2)

关于scala - 可以使用 reduceBykey 来更改类型和组合值 - Scala Spark?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535060/

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