Spark之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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值