map()和flatMap()的区别

map()和flatMap()的区别

map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回

flatMap会先执行map的操作,再将所有对象合并为一个对象,返回值是一个Sequence

flatMap() 的一个简单用途是把输入的字符串切分为单词

3.5.1 基本RDD
首先来讲讲哪些转化操作和行动操作受任意数据类型的 RDD 支持。
1. 针对各个元素的转化操作
你很可能会用到的两个最常用的转化操作是 map()filter()(见图 3-2)。转化操作
map() 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果


RDD 中对应元素的值。而转化操作 filter() 则接收一个函数,并将 RDD 中满足该函数的
元素放入新的 RDD 中返回。

例 3-26:Python 版计算 RDD 中各值的平方
nums = sc.parallelize([1, 2, 3, 4])
squared = nums.map(lambda x: x * x).collect()
for num in squared:
 print "%i " % (num)
 
 
 有时候,我们希望对每个输入元素生成多个输出元素。  flatMap() 
 实现该功能的操作叫作 flatMap()。 和 map() 类似,我们提供给 flatMap() 的函数被分别应用到了输入 RDD 的每个元素上。不
过返回的不是一个元素,而是一个返回值序列的迭代器。输出的 RDD 倒不是由迭代器组
成的。我们得到的是一个包含各个迭代器可访问的所有元素的 RDD。flatMap() 的一个简
单用途是把输入的字符串切分为单词,

你可以把 flatMap() 看作将返回的迭代器
“拍扁”,这样就得到了一个由各列表中的元素组成的 RDD,而不是一个由列表组成的 RDD


#方法2需要复制这三行
import findspark
findspark.init()
import pyspark 
import sys
from pyspark import SparkConf, SparkContext
if __name__ == "__main__":
#     master = "local"
    if len(sys.argv) == 2:
        master = sys.argv[1]
#         在 Python 中初始化 Spark
    conf = SparkConf().setMaster("local").setAppName("My App")
    sc = SparkContext(conf = conf)

# 通过sc.parallelize可以把Python list,NumPy array或者Pandas Series,Pandas DataFrame转成Spark的RDD数据。
    lines = sc.parallelize(["hello world", "hi"])
    words = lines.flatMap( lambda line : line.split(" ") )
    words.first()
    print(words.first())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值