Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala flatMap与map的效率以及Spark中的减少_Scala_Apache Spark_Mapreduce_Rdd_Flatmap - Fatal编程技术网

Scala flatMap与map的效率以及Spark中的减少

Scala flatMap与map的效率以及Spark中的减少,scala,apache-spark,mapreduce,rdd,flatmap,Scala,Apache Spark,Mapreduce,Rdd,Flatmap,我有一个文本文件sherlock.txt,其中包含多行文本。我使用以下方法将其装入spark shell: val textFile = sc.textFile("sherlock.txt") 我的目的是计算文件中的字数。我遇到了两种做这项工作的替代方法 首先使用flatMap: textFile.flatMap(line => line.split(" ")).count() 第二步使用map,然后使用reduce: textFile.map(line => line.spli

我有一个文本文件sherlock.txt,其中包含多行文本。我使用以下方法将其装入spark shell:

val textFile = sc.textFile("sherlock.txt")
我的目的是计算文件中的字数。我遇到了两种做这项工作的替代方法

首先使用flatMap:

textFile.flatMap(line => line.split(" ")).count()
第二步使用map,然后使用reduce:

textFile.map(line => line.split(" ").size).reduce((a, b) => a + b)
两者正确地产生相同的结果。我想知道上述两种替代实现在时间和空间复杂性上的差异,如果确实存在的话


scala解释器是否将两者转换为最有效的形式?

我认为处理这一问题最惯用的方法是
map
sum

textFile.map(_.split(" ").size).sum
但最终总成本将由
line.split(“”
)控制

通过手动迭代字符串并计算连续的空格,而不是构建新的
数组
,您可能会做得更好一些,但我怀疑这样做是否值得大惊小怪

如果您喜欢更深入的了解:

其中,
Utils.getIteratorSize
几乎是对
Iterator
的一个简单迭代,它包含一个和

def count(): Long = sc.runJob(this, Utils.getIteratorSize _).sum  
_.fold(0.0)(_ + _)