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())
相关推荐
随心............1 小时前
yarn面试题
大数据·hive·spark
这里有鱼汤1 小时前
📊量化实战篇:如何计算RSI指标的“拥挤度指标”?
后端·python
JJJJ_iii1 小时前
【机器学习05】神经网络、模型表示、前向传播、TensorFlow实现
人工智能·pytorch·python·深度学习·神经网络·机器学习·tensorflow
William.csj1 小时前
服务器/Pytorch——对于只调用一次的函数初始化,放在for训练外面和里面的差异
人工智能·pytorch·python
Ingsuifon1 小时前
pytorch踩坑记录
人工智能·pytorch·python
smj2302_796826522 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
m0_626535202 小时前
力扣题目练习 换水问题
python·算法·leetcode
软件技术NINI2 小时前
MATLAB疑难诊疗:从调试到优化的全攻略
javascript·css·python·html
Q_Q19632884752 小时前
python+uniapp基于微信小程序的助眠小程序
spring boot·python·小程序·django·flask·uni-app·node.js
ZYMFZ2 小时前
python面向对象
前端·数据库·python