PySpark 入门十五:RDD的map和flatMap

RDD的map和flatMap

最近约看约有些困惑这两个方法了,于是仔细查了一下,总结了以下的区别和联系

区别
  1. map() 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为RDD 中对应元素的结果;
  2. flatMap()对RDD每个输入元素生成多个输出元素,我们提供给 flatMap() 的函数被分别应用到了输入 RDD 的每个元素上。
    PySpark 入门十五:RDD的map和flatMap_第1张图片
    这样看起来还是比较复杂,接下来举个非常简单的例子就非常明确了
from pyspark import SparkContext
from pyspark.sql.session import SparkSession

sc = SparkContext.getOrCreate()

lin = sc.parallelize(["pandas", "i like pandas"])
res = lin.flatMap(lambda x: x.split(' '))
print(res.collect())

res2 = lin.map(lambda x: x.split(' '))
print(res2.collect())

[‘pandas’, ‘i’, ‘like’, ‘pandas’]
[[‘pandas’], [‘i’, ‘like’, ‘pandas’]]

从上面的结果就可以很直接的看出来,flatmap作用下的rdd 将原RDD的两个元素分割并返回了4个元素,作用到了RDD元素中的每一个值;
map作用下的RDD返回的还是两个元素,只作用了对应位置的元素,对值的作用会以列表形式返回结果,但不改变原来元素的位置。

你可能感兴趣的:(PySpark从入门到放弃,数据分析,python,spark,hadoop)