spark 的 map 和 flatMap 应该怎样理解?
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
flatMap就是先map再flat,在你的例子中,flatMap第一步会得到和map一样的结果:
第二步会针对里面每一项作flat,这时候每一项都得是可迭代的,而python里面字符串是可迭代的,spark会执行类似于下面的迭代操作
这样就得到了最后一个个字符的结果
如果某项是不可迭代的,比如只是个数字1,那么会报错的,你可以试试
map操作我记得的有map(一条对一条),mapToPair(map成键值对),flatMap(一条记录变n条(n>=0))。你可以看看官方的wordCount demo,对flatMap的功能解释得很详尽了
flatmap是将集合展开为一维形式