最近约看约有些困惑这两个方法了,于是仔细查了一下,总结了以下的区别和联系
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返回的还是两个元素,只作用了对应位置的元素,对值的作用会以列表形式返回结果,但不改变原来元素的位置。