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())
相关推荐
小刘在重生~28 分钟前
Java 常用类|包装类 装箱拆箱、Integer 缓存面试题
java·python·缓存
2601_962099461 小时前
Python xlwt设置excel单元格字体及格式
python·excel·xlwt·样式设置·单元格格式
奇牙coding1231 小时前
GPT-6-Astra API 接入教程:OpenRouter 路由配置 + Python/curl 示例 + 静默降级踩坑
开发语言·python·gpt·ai
2601_962298272 小时前
Python与Selenium结合的Web自动化测试全流程实践教程
自动化测试·python·selenium·web测试·pageobjectmodel
天衍四九-2 小时前
第一章:从 LLM 到 Agent —— DeepSeek Harness 入门
网络·数据库·人工智能·python
529宝宝起名网2 小时前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
2601_962298672 小时前
Python:对象缓存优化机制(CPython)
python·性能优化·内存优化·cpython·对象缓存
枫彩3 小时前
A股数据源怎么选?用 Python 验收 AI 复盘的日期与明细
python·ai agent·股票数据·mcp
2601_962382433 小时前
Python 代码不可不知的函数式编程技术
python·函数式编程·高阶函数·嵌套函数·头等函数
2601_962078033 小时前
Python办公自动化与数据分析实战 培训班2021年
python·数据分析·办公自动化·自动化办公·实战演练