我试图了解在spark中运行collectAsMap()函数时会发生什么。根据Pyspark文档,


  collectAsMap()
  将此RDD中的键/值对作为字典返回给主服务器。


对于核心火花,它说,


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


当我尝试在pyspark中为列表运行示例代码时,得到以下结果:
python - collectAsMap()函数如何用于Spark API-LMLPHP

对于scala,我得到以下结果:
python - collectAsMap()函数如何用于Spark API-LMLPHP

我对为什么不返回列表中的所有元素感到有些困惑。有人可以帮助我了解在这种情况下为什么我会得到选择性结果。

谢谢。

最佳答案

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


  警告:这不会返回多图(因此,如果您对同一个键有多个值,则每个键中仅保留一个值)。


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

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

08-08 02:11