我是Spark的新手,我想了解两种JavaRDD与JavaPairRDD之间的区别,以及如果将JavaRDD转换为JavaPairRDD,此操作的繁重程度
JavaRDD<Tuple2<String, String>> myRdd // This is my JavaRDD
JavaPairRDD<String, String> pairRDD = JavaPairRDD.fromJavaRDD(myRdd);
答案 0 :(得分:4)
之所以有区别,是因为某些操作(aggregateByKey
,groupByKey
等)需要具有键进行分组,然后将值放入分组结果中。 JavaPairRDD可以向开发人员声明合同,要求提供 Key 和 Value 。
常规JavaRDD
可用于不需要显式Key字段的操作。这些操作是对任意元素类型的通用操作。
看看他们的javadocs,以了解可用于每个函数的功能。
此外,将一个转换为另一个应该很快。这将是一个狭窄的转换,因为每一行都将转换为另一行,并且不需要跨网络发送任何数据。通常,您的性能将主要取决于您执行的广泛转换,即必须在节点之间发送数据以将行与同一工作线程上的同一键并置在一起。