Scala 单个RDD记录可以有多大?

Scala 单个RDD记录可以有多大?,scala,apache-spark,iterable,Scala,Apache Spark,Iterable,我有这样一个RDD: val graphInfo: RDD[(Long, Int, Long, Long, Iterable[Long])] 节点由长型整数表示,并将存储在graphInfo的Iterable[Long]中。该Iterable中可以包含多少元素?单个RDD记录的大小有哪些限制(如果有) 该Iterable中可以包含多少元素 iterable可能包含无限个元素。例如,如果iterable来自流源,只要该流源可用,您就可以接收元素 我只是不确定RDD的Iterable中的太多元素是

我有这样一个RDD:

val graphInfo: RDD[(Long, Int, Long, Long, Iterable[Long])]
节点由长型整数表示,并将存储在
graphInfo
Iterable[Long]
中。该
Iterable
中可以包含多少元素?单个RDD记录的大小有哪些限制(如果有)

该Iterable中可以包含多少元素

iterable可能包含无限个元素。例如,如果iterable来自流源,只要该流源可用,您就可以接收元素

我只是不确定RDD的Iterable中的太多元素是否会 制造火花碰撞


这同样取决于如何填充iterable。如果你的工作有足够的记忆力,你应该没事。找到答案的最佳方法是简单地通过线索和错误,也可以通过理解

如前所述,元素的数量没有限制

但是,单个RDD记录使用的内存量可能有限制:Spark将最大分区大小限制为2GB(请参阅)。每个分区都是记录的集合,因此理论上一条记录的上限是2GB(当每个分区包含一条记录时达到此限制)


实际上,不鼓励超过几兆字节的记录,因为上面提到的限制可能会迫使您人为地增加分区数,使其超过最佳分区数。Spark的所有优化考虑都是为了处理尽可能多的记录(给定足够的资源),而不是处理尽可能大的记录。

Iterable的长度没有限制。它可能是无限的。我只是不确定RDD的Iterable中的元素太多是否会导致spark崩溃。这是一个不同的问题,关于spark,而不是Scala。我怀疑是否有固定的限制,但最终会耗尽节点上的内存。真正的大数据聚合应该是RDD本身,而不是单个条目。用例是什么?我们想要对一个巨大的图进行分层聚类。在每一步中,我们都需要将节点存储在集群中,以便进行下一次分区。每个集群在RDD中都有一个条目,该条目包含iterable[Long]中存储的所有节点。那么,这是对图形建模的错误方法。如果RDD只包含几行,每一行都非常大,那么使用Spark将一无所获。