我有类似这样的代码,我想在JavaRDD而不是RDD上工作。所以,我在这里进行转换。我想知道这种转换对性能的影响,特别是在处理GB数据时。

RDD<String> textFile = sc.textFile(filePath, 2);
JavaRDD<String> javaRDD = textFile.toJavaRDD();

这是宽泛的转变还是狭窄?
JavaRDD和RDD有什么区别?

最佳答案

不会有明显的性能损失-JavaRDDRDD的简单包装,只是使从Java代码进行的调用更加方便。它拥有原始的RDD作为其成员,并在任何方法调用时调用该成员的方法,例如(来自JavaRDD.scala):

def cache(): JavaRDD[T] = wrapRDD(rdd.cache())
wrapRDD可以归结为new JavaRDD[T](rdd)之类的东西,因此唯一的性能损失就是为每个方法调用都创建一个瘦Java对象,但这完全可以忽略不计,因为它不是RDD中每个元素都要做,而是整个对象一次。

10-08 02:41