collectAsMap()函数如何用于Spark API

时间:2016-06-09 19:14:06

标签: python scala apache-spark pyspark

我试图了解当我们在spark中运行device_t role = DEVICE1; volatile int state; char array[4]; void setup() { SimbleeGZLL.begin(role); Serial.begin(9600); timer_one(1); } void loop() { array[0] = analogRead(2); array[1] = analogRead(3); array[2] = analogRead(4); array[3] = analogRead(5); SimbleeGZLL.sendToHost(EMG,4); } ()函数时会发生什么。根据Pyspark文档,它说,

  

collectAsMap(个体)   将此RDD中的键值对作为字典返回给master。

并且核心火花它说,

  

def collectAsMap():Map [K,V]返回此RDD中的键值对   作为地图给主人。

当我尝试在pyspark中为List运行示例代码时,我得到以下结果: pyspark result

对于scala我得到了这个结果: scala result

我有点困惑为什么它没有返回列表中的所有元素。有人可以帮助我理解这种情况下我正在获得选择性结果的原因。

感谢。

2 个答案:

答案 0 :(得分:2)

Scala和Python API之间collectAsMap的语义是相同的,所以我将查看第一个WLOG。 PairRDDFunctions.collectAsMap的文档明确指出:

  

警告:这不会返回多重映射(因此,如果您对同一个键有多个值,则返回的映射中每个键只保留一个值)

特别是,当前实现按顺序将键值对插入到结果映射中,因此在两个示例中只有最后两对存在。

如果您使用collect,它将返回Array[(Int,Int)]而不会丢失任何配对。

答案 1 :(得分:0)

collectAsMap会将配对RDD的结果作为地图集合返回。由于它返回了Map集合,因此只能获得具有唯一键的对,并且将删除具有重复键的对。