Spark---数据计算

flatmap算子:

python 复制代码
# flatmap算子: 对rdd执行map操作,然后进行解除嵌套操作

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

# 准备一个RDD
rdd = sc.parallelize(["itheima itcast 666", "itheima itheima itcast", "python itheima"])

# 需求:将RDD数据里面的一个个单词提取出来
rdd2 = rdd.flatMap(lambda x: x.split(" "))
print(rdd2.collect())  # ['itheima', 'itcast', '666', 'itheima', 'itheima', 'itcast', 'python', 'itheima']
复制代码
map算子:
python 复制代码
# PySpark的数据计算,都是基于RDD对象来进行的,那么如何进行呢?
# 依赖,RDD对象内置丰富的 成员方法(算子)
#
# map方法:对RDD内的元素逐个处理,并返回一个新的RDD;接受一个处理函数,,可用lambda匿名函数快速编写
from pyspark import SparkConf, SparkContext

# 添加python解释器路径
# import os
# os.environ['PYSPARK_PYTHON'] = "python.exe"  # python解释器路径

# 创建SparkConf类对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")

# 基于SparkConf类对象创建sparkContext类对象
sc = SparkContext(conf=conf)

# 准备一个RDD
rdd = sc.parallelize([1, 2, 3, 4, 5])

# 通过map方法将全部数据都乘以10
# def func(data):
#     return data * 10

# rdd2 = rdd.map(func)  # (T) -> U : 表示func函数必须有一个参数和一个返回值
# print(rdd2.collect())  # [10, 20, 30, 40, 50]

# 匿名函数
# rdd2 = rdd.map(lambda x: x * 10)
# print(rdd2.collect())

# 链式调用
rdd3 = rdd.map(lambda x: x * 10).map(lambda x: x + 5)
print(rdd3.collect())  # [15, 25, 35, 45, 55]

sc.stop()

reduceByKey算子:

python 复制代码
# reduceByKey算子:针对KV型(二元元组),自动按照key分组,根据提供的聚合逻辑,完成组内数据(value)的聚合操作
from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

# 准备一个RDD
rdd = sc.parallelize([("男", 99), ("男", 88), ("女", 99), ("女", 66)])
# 求男生和女生两个组的成绩之和
rdd2 = rdd.reduceByKey(lambda a, b: a + b)
print(rdd2.collect())  # [('女', 165), ('男', 187)]

distinct算子: 去重

python 复制代码
# distinct: 对RDD数据进行去重,返回新的RDD
# 语法:rdd.distinct()    # 无需传参

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

rdd = sc.parallelize([1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8])

rdd2 = rdd.distinct()
print(rdd2.collect())

filter算子:过滤

python 复制代码
# Filter: 过滤想要的数据进行保留,得到True保留至返回值的RDD中
from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

rdd = sc.parallelize([1, 2, 3, 4, 5])
rdd2 = rdd.filter(lambda num: num % 2 == 0)  # [2, 4]
print(rdd2.collect())
复制代码
sortBy算子:排序
python 复制代码
# sortBy算子:对RDD数据进行排序,基于指定的排序依据
# 语法:rdd.sortBy(func,ascending=False,numpartitions=1)
# func: (T) -> U: 告知按照rdd中的哪个数据进行排序,比如lambda x:x[1] 表示按照rdd中的第1列元素进行排序
# ascending :False降序 True升序
# numpartitions: 用多少分区排序
from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)
# 读数据
rdd = sc.textFile("./test.txt")
# 取单词
word_rdd = rdd.flatMap(lambda x: x.split(" "))
# print(word_rdd.collect())

# 准换成二元元组,单词为key,value为1
word_with_one_rdd = word_rdd.map(lambda word: (word, 1))
# print(word_with_one_rdd.collect())

# 统计分组结果
result = word_with_one_rdd.reduceByKey(lambda a, b: a + b)
# print(result.collect())

# 排序
final_add = result.sortBy(lambda x: x[1], ascending=False, numPartitions=1)
print(final_add.collect())

小案例1:

python 复制代码
# 案例:统计每个单词数量

from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)
# 读数据
rdd = sc.textFile("./test.txt")
# 取单词
word_rdd = rdd.flatMap(lambda x: x.split(" "))
# print(word_rdd.collect())

# 准换成二元元组,单词为key,value为1
word_with_one_rdd = word_rdd.map(lambda word: (word, 1))
# print(word_with_one_rdd.collect())

# 统计分组结果
result = word_with_one_rdd.reduceByKey(lambda a, b: a + b)
print(result.collect())
相关推荐
maqr_11024 分钟前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u01091476029 分钟前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_3812881834 分钟前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
maqr_1101 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python
sg_knight1 小时前
设计模式实战:责任链模式(Chain of Responsibility)
python·设计模式·责任链模式
2301_803875611 小时前
如何通过phpMyAdmin给WordPress所有用户发送全站通知_系统表插入
jvm·数据库·python
学弟2 小时前
【内涵】深度学习中的三种变量及pytorch中对应的三种tensor
人工智能·pytorch·python
2301_777599372 小时前
mysql如何进行数据库容量规划_评估磁盘空间增长趋势
jvm·数据库·python
aq55356002 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php
m0_377618233 小时前
Redis怎样应对大规模集群的重启风暴_分批次重启节点并等待集群状态恢复绿灯后再继续操作
jvm·数据库·python