具有分而治之的火花

问题描述 投票:0回答:1

我正在学习Spark,并尝试处理一些巨大的数据集。我不明白为什么我看不到采用以下策略(伪)的阶段完成时间减少:

data = sc.textFile(dataset).cache()

while True:
    data.count()
    y = data.map(...).reduce(...)
    data = data.filter(lambda x: x < y).persist()

所以想法是选择y,以便在大多数情况下将数据减半。但是由于某种原因,看起来所有数据总是在每个count()上再次被处理。

这是某种反模式吗?我应该如何使用Spark进行此操作?

apache-spark pyspark rdd
1个回答
0
投票

是,这是反模式。

map,与Spark中的大多数(但不是全部)分布式基元相同,在定义上几乎是一种分而治之的方法。您获取数据,计算拆分,然后将各个拆分的计算透明地分布到集群中。

尝试使用高级API进一步划分此过程完全没有意义。充其量,它根本不会带来任何好处,最糟糕的是,它将招致多次数据扫描,缓存和溢出的代价。

© www.soinside.com 2019 - 2024. All rights reserved.