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/
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/