在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/

10-09 09:41