加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – flatMap与map的效率,然后是Spark中的reduce

发布时间:2020-12-16 18:08:30 所属栏目:安全 来源:网络整理
导读:我有一个包含多行文本的文本文件sherlock.txt.我使用以下命令将其加载到spark- shell中: val textFile = sc.textFile("sherlock.txt") 我的目的是计算文件中的单词数.我遇到了两种替代方法来完成这项工作. 首先使用flatMap: textFile.flatMap(line = line.
我有一个包含多行文本的文本文件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解释器是否将两者都转换为最有效的形式?

解决方法

我认为处理这个问题最常用的方法是映射和求和:

textFile.map(_.split(" ").size).sum

但是在一天结束时,总费用将由line.split(“”)主导.

通过手动迭代字符串并计算连续的空格而不是构建新的数组,你可能会做得更好一点,但我怀疑它是值得所有的大惊小怪.

如果你更喜欢一点点深入了解count is defined as:

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

Utils.getIteratorSize与Iterator相比是一个天真的迭代,其中包含一个和sum is equivalent to的总和

_.fold(0.0)(_ + _)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读