Spark Map-reduce 比 naive approche 慢

Spark Map-reduce slower than naive approche

def naive_word_counting(wordsList):

    words = {}

    for word in wordsList:
        if word in words:
            words[word] += 1
        else:
            words[word] = 1

    return sorted(words.items(), key=lambda x: x[1], reverse=True)
def map_reduce_word_counting(wordsList):

    sparkRDD = sparkEngine.sparkContext.parallelize(wordsList)

    def map_function(word):
        return (word, 1)

    def reduce_function(a, b):
        return a + b

    counts = sparkRDD.map(map_function).reduceByKey(reduce_function)

    return counts.sortBy(lambda x: x[1], ascending=False).collect()

在 4.141.822 个单词的列表中,naive_word_counting runs 在 0.61 秒内运行,而 map_reduce_word_counting 在 3.01 秒内运行。我预计 spark 会比原生方式更快,但它确实慢得多。

为什么会这样?有什么地方没看懂吗?

你是如何只用字数来衡量这部分的执行时间的?请记住,在执行主要逻辑之前,Spark 需要一些时间来创建上下文。

请查找另一个如何计算字数的示例: https://bigdata-etl.com/configuration-of-apache-spark-scala-and-intellij/