在Java Spark中,我可以使用keyBy()或mapToPair()为JavaRDD创建一些密钥。使用keyBy()使我的意图更加清晰,并使用带有更少代码的参数函数(该函数返回键而不是元组)。但是,与mapToPair()相比,使用keyBy()的性能有没有改善?谢谢
最佳答案
您可以浏览源代码中的差异:
def mapToPair[K2, V2](f: PairFunction[T, K2, V2]): JavaPairRDD[K2, V2] = {
def cm: ClassTag[(K2, V2)] = implicitly[ClassTag[(K2, V2)]]
new JavaPairRDD(rdd.map[(K2, V2)](f)(cm))(fakeClassTag[K2], fakeClassTag[V2])
}
和:
def keyBy[U](f: JFunction[T, U]): JavaPairRDD[U, T] = {
implicit val ctag: ClassTag[U] = fakeClassTag
JavaPairRDD.fromRDD(rdd.keyBy(f))
}
哪个调用:
def keyBy[K](f: T => K): RDD[(K, T)] = withScope {
val cleanedF = sc.clean(f)
map(x => (cleanedF(x), x))
}
他们基本上都调用
map
并生成一个新的RDD
。我认为两者之间没有显着差异。关于java - Spark:keyBy()vs mapToPair(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40346640/