Spark在RDD中创建逻辑分区。我有两个问题: -
1)Google上的任何地方都说分区有助于并行处理,每个分区都可以在不同的节点上进行处理。我的问题是,如果我有多核心 机器,我不能在同一节点处理分区?
2)假设我从文件系统读取文件并且spark创建了一个带有四个分区的RDD。现在可以将每个分区进一步划分为RDD吗?例如: -
firstRDD=sc.textFile("hdfs://...")
//firstRDD contains four partition which are processed on four diff nodes
secondRDD=firstRDD.filter(someFunction);
// Now will each node create separate secondRDD which will have further paritions ?
答案 0 :(得分:1)
输入文本文件分为4个分区,这些分区可能在单个节点内,或者最多4个节点,不将被分割为更多分区,因此将由读取它们的同一执行程序进行评估原来。 但是,您可以repartition
RDD /数据帧来增加并行化(例如为64位执行程序创建64个分区)。这将迫使进行洗牌,这可能是昂贵的,但特别是在计算上昂贵的工作中是值得的。这是一个问题的常见情况是读取不可分割的文件,如GZIP文件。无论大小如何,单个执行程序都必须读入文件(并进行处理!!)。因此,对许多GZIP工作负载进行重新分区非常有用,因为它有助于并行计算。