我的数据无法容纳在内存中。因此,我正在阅读以下链接:
https://stackoverflow.com/a/32582416/9759150
https://stackoverflow.com/a/29518749/9759150
与此相关的先前版本:https://spark.apache.org/faq.html
如果数据不适合内存,Spark会在磁盘上写入读数。但是我要避免在磁盘上写。因此,我想知道是否可以确定需要迭代数据几次以仅在内存上对其进行处理。我可以这样做吗?怎么样?
答案 0 :(得分:2)
要确定地遍历数据集所需的确切时间非常困难。
从磁盘和缓存中读取数据后,spark将具体化数据集并使用钨丝格式将其表示在内存中。
现在,内存中数据集的大小将取决于数据集各个列的数据类型。同样由于数据的反序列化,它将比串行化的磁盘数据占用更多的内存。
根据我的经验,通常需要3-4倍的内存才能将镶木地板磁盘数据放入内存中。因此,如果在镶木地板中的HDFS中有50G数据,则群集中可能需要大约200G内存来缓存完整的数据。
您需要先进行反复试验,然后才能得出理想的数字。