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())
相关推荐
海阔天空_201310 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@18 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下29 分钟前
Python基础学习_01
python
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀1 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE2 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i2 小时前
Python爬虫学习
爬虫·python·学习
努力的家伙是不讨厌的3 小时前
解析json导出csv或者直接入库
开发语言·python·json