pyspark转换函数

0

 本文列举5个常见的RDD转换函数:

操作 含义
filter(func) 筛选出满足函数func的元素,并返回一个新的数据集
map(func) 将每个元素传递到函数func中,并将结果返回一个新的数据集
flatMap(func) 与map类似,但每个输入元素都可以映射到0个或多个输出结果
groupByKey() 应用于(K, V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
reduceByKey(func) 应用于(K, V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中每个值是将每个key传递到函数func中进行聚合后的结果

1、filter(func)

word.txt:
Hadoop is good
Spark is better
Spark is fast

# sc.textFile('word.txt')是创建RDD对象的一种方式,可以是打开本地文件,可以是打开HDFS文件,也可以是打开云端文件
# 另一种创建RDD对象的方式是并行化数组或集合,eg:sc.parallelize([1, 2, 3, 4, 5])
lines = sc.textFile('word.txt')
linesWithSpark = lines.filter(lambda line : 'Spark' in line)
# collect是动作函数,作用是返回RDD中的数据,以list形式
linesWithSpark.collect()

输出

Spark is better
Spark is fast

2、map(func)

eg1:

rdd1 = sc.parallelize([1, 2, 3, 4, 5])
rdd2 = rdd1.map(lambda x:x + 10)
rdd2.collect()

输出

11
12
13
14
15

eg2:

lines = sc.textFile('word.txt')
# split(" ")对字符串以" "进行拆分,得到列表
words = lines.map(lambda line:line.split(" "))
words.collect()

输出:每个元素都是列表类型

['Hadoop', 'is', 'good']
['Spark', 'is', 'fast']
['Spark', 'is', 'better']

3、flatMap(func)

lines = sc.textFile('word.txt')
words = lines.flatMap(lambda line:line.split(" "))
words.collect()

输出

#flatMap可以理解为两步,第一步是进行map函数,第二步是对map函数后的RDD进行flat(压扁)操作
'Hadoop'
'is'
'good'
'Spark'
'is'
'fast'
'Spark'
'is'
'better'

4、groupByKey()

words = sc.parallelize([("Hadoop", 1), ("is", 1), ("good", 1), ("Spark", 1), ("is", 1), ("fast", 1), ("Spark", 1), ("is", 1), ("better", 1)])
words1 = words.groupByKey()
words1.collect()

输出

'Hadoop', <pyspark.resultiterable.ResultIterable object at 0x7fb210552c88>)
('better', <pyspark.resultiterable.ResultIterable object at 0x7fb210552e80>)
('fast', <pyspark.resultiterable.ResultIterable object at 0x7fb210552c88>)
('good', <pyspark.resultiterable.ResultIterable object at 0x7fb210552c88>)
('Spark', <pyspark.resultiterable.ResultIterable object at 0x7fb210552f98>)
('is', <pyspark.resultiterable.ResultIterable object at 0x7fb210552e10>
(“Hadoop”, 1) (“is”, 1) (“good”, 1)
(“Spark”, 1) (“is”, 1) (“fast”, 1)
(“Spark”, 1) (“is”, 1) (“better”, 1)

                            ⬇️
                            ⬇️
                            ⬇️

(“Hadoop”, 1) (“is”, (1, 1, 1))
(“Spark”, (1, 1)) (“good”, 1)
(“fast”, 1) (“better”, 1)

5、reduceByKey(func)

words = sc.parallelize([("Hadoop", 1), ("is", 1), ("good", 1), ("Spark", 1), ("is", 1), ("fast", 1), ("Spark", 1), ("is", 1), ("better", 1)])
# lambda a,b:a+b意思是:对于一个列表[x1, x2, x3, ……]先是令a=x1, b=x2,然后执行a+b,再将结果赋值给a,即a=x1+x2,再令b=x3,再执行a+b,再将结果赋值给a……
words2 = words.reduceByKey(lambda a,b:a+b)
words2.collect()

输出:

# reduceByKey可以理解为两步,第一步是先进行groupByKey操作,然后对ResultIterabl对象进行func操作
('good', 1)
('Hadoop', 1)
('better', 1)
('Spark', 2)
('fast', 1)
('is', 3)

猜你喜欢

转载自blog.csdn.net/TSzero/article/details/114701672
今日推荐