spark 的 map 和 flatMap 应该怎样理解?

发布于 2022-09-03 11:23:31 字数 845 浏览 19 评论 0

conf = SparkConf().setAppName("Simple App").setMaster("local")
sc = SparkContext(conf=conf)
file = "./README.md"
“”“
  111 aaa bcd
  22 qqq www
”“”
dataFile = sc.textFile(file)
test = dataFile.map(lambda s : s)
print test.collect()  # [u'111 aaa bcd', u'22 qqq www'] 
test = dataFile.flatMap(lambda s : s)  
print test.collect()  # [u'1', u'1', u'1', u' ', u'a', u'a', u'a', u' ', u'b', u'c', u'd', u'2', u'2', u' ', u'q', u'q', u'q', u' ', u'w', u'w', u'w'

map文档是这样解释的:Return a new distributed dataset formed by passing each element of the source through a function func.
我的理解是对rdd的每一个element进行func,最后返回的数量应该是等于element的数量的。

flatMap是这样解释:Similar to map, but each input item can be mapped to 0 or more output items (so func should return a Seq rather than a single item).

这里不懂为什么flatMap结果是一个个字母?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你的往事 2022-09-10 11:23:31

flatMap就是先map再flat,在你的例子中,flatMap第一步会得到和map一样的结果:

[u'111 aaa bcd', u'22 qqq www']

第二步会针对里面每一项作flat,这时候每一项都得是可迭代的,而python里面字符串是可迭代的,spark会执行类似于下面的迭代操作

for c in '111 aaa bcd':
    print c

这样就得到了最后一个个字符的结果

如果某项是不可迭代的,比如只是个数字1,那么会报错的,你可以试试

小嗲 2022-09-10 11:23:31

map操作我记得的有map(一条对一条),mapToPair(map成键值对),flatMap(一条记录变n条(n>=0))。你可以看看官方的wordCount demo,对flatMap的功能解释得很详尽了

坦然微笑 2022-09-10 11:23:31

flatmap是将集合展开为一维形式

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文