RDD和Pair RDD的差异和用例

时间:2016-05-06 06:52:04

标签: apache-spark

我是新手,并试图了解正常RDD和一对RDD之间的区别。使用一对RDD而不是普通RDD的用例有哪些?如果可能的话,我想通过一个例子来理解对RDD的内部结构。感谢

4 个答案:

答案 0 :(得分:3)

主要区别是:

pairRDD操作(例如map,reduceByKey等)产生键值对。而对RDD的操作(例如flatMap或reduce)会为您提供值集合或单个值

pairRDD操作并行应用于每个键/元素.RDD上的操作(如flatMap)将应用于整个集合。

答案 1 :(得分:2)

Spark为包含键/值对的RDD提供特殊操作。这些RDD称为对RDD。配对RDD在许多程序中都是一个有用的构建块,因为它们公开了允许您并行处理每个键或通过网络重组数据的操作。例如,对RDD具有reduceByKey()方法,该方法可以为每个键单独聚合数据,以及join()方法,可以通过使用相同的键对元素进行分组来将两个RDD合并在一起。通常从RDD中提取字段(例如,表示事件时间,客户ID或其他标识符),并将这些字段用作对RDD操作中的键。

答案 2 :(得分:1)

配对RDD只是一种引用包含键/值对的RDD的方式,即数据元组。这不是一个问题,而是使用另一个而不是使用另一个。例如,如果您想根据ID计算某些内容,则可以按ID将输入分组。这个例子只是拆分一行文本并使用第一个单词作为键[1]返回一对RDD:

val pairs = lines.map(x => (x.split(" ")(0), x))

您最终得到的配对RDD允许您根据键减少值或对数​​据进行排序,仅举几个例子。

阅读底部的链接可能对你有好处,我无耻地复制了这个例子,因为理解Pair RDD以及如何使用元组对于你将要做的许多事情来说是非常基础的。火花。阅读“对RDD上的转换”,了解一旦配对后通常想要做什么。

[1] https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html

答案 3 :(得分:0)

PairRDD是 KEY / VALUE 对。

示例: 如果您有一个包含国家/地区机场详细信息的csv。 我们通过从路径中读取CSV来创建普通的RDD。(列:机场ID,机场名称,机场服务的主要城市,机场所在的县)

JavaRDD<String> airports = sc.textFile("in/airports.text");

如果要使用带有机场名称和其所在国家/地区的RDD,则必须在RDD上方创建RDD对。

JavaPairRDD<String,String> AirportspairRDD = airports.mapToPair((PairFunction<String, String, String>) s ->     {
    return new Tuple2<>(s.split(",")[1],s.split(",")[3]);
});