假设我在3个节点上有一个分发系统,我的数据分布在这些节点中.例如,我有一个test.csv文件,它存在于所有3个节点上,它包含2列:
**row | id, c.**
---------------
row1 | k1 , c1
row2 | k1 , c2
row3 | k1 , c3
row4 | k2 , c4
row5 | k2 , c5
row6 | k2 , c6
row7 | k3 , c7
row8 | k3 , c8
row9 | k3 , c9
row10 | k4 , c10
row11 | k4 , c11
row12 | k4 , c12
Run Code Online (Sandbox Code Playgroud)
然后我使用SparkContext.textFile将文件读出为rdd等等.据我所知,每个spark worker节点都会读取文件中的一部分.所以现在让我们说每个节点都会存储:
我的问题是,假设我想对这些数据进行计算,我需要将一个键组合在一起,因此键值对将是[k1 [{k1 c1} {k1 c2} {k1 c3}]]..等等. …
我是Spark的新手,我发现文档说Spark会将数据加载到内存中以使迭代算法更快.
但是,如果我有一个10GB的日志文件并且只有2GB的内存呢?Spark会一如既往地将日志文件加载到内存中吗?
我们都知道Spark会在内存中进行计算.我只是好奇以下.
如果我RDD从HDFS在我的pySpark shell中创建10 ,它是否意味着所有这些10 RDD秒数据将驻留在Spark Workers Memory上?
如果我不删除RDD,它会永远存在于内存中吗?
如果我的数据集(文件)大小超过可用的RAM大小,那么数据将存储在何处?