我试图了解在spark中运行collectAsMap
()函数时会发生什么。根据Pyspark文档,
collectAsMap()
将此RDD中的键/值对作为字典返回给主服务器。
对于核心火花,它说,
def collectAsMap():Map [K,V]返回此RDD中的键值对
交给大师作为地图。
当我尝试在pyspark中为列表运行示例代码时,得到以下结果:
对于scala,我得到以下结果:
我对为什么不返回列表中的所有元素感到有些困惑。有人可以帮助我了解在这种情况下为什么我会得到选择性结果。
谢谢。
最佳答案
Scala和Python API之间collectAsMap
的语义是相同的,因此我将看第一个WLOG。 PairRDDFunctions.collectAsMap
的文档明确指出:
警告:这不会返回多图(因此,如果您对同一个键有多个值,则每个键中仅保留一个值)。
特别是,当前实现将键值对按顺序插入到结果映射中,因此在您的两个示例中,只有最后两个对存在。
如果改用collect
,它将返回Array[(Int,Int)]
而不会丢失任何对。