Spark的数据输入、数据计算、数据输出

PySpark的编程,主要氛围三大步骤:1)数据输入、2)数据处理计算、3)数据输出

1)数据输入:通过SparkContext对象,晚上数据输入

2)数据处理计算:输入数据后得到RDD对象,对RDD对象进行迭代计算

3)数据输出:最终通过RDD对象的成员方法,完成数据输出工作

安装pyspark

pip install pyspark

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark # 清华大学镜像

想要使用PySpark库完成数据处理,首先需要构建一个执行环境入口对象 PySpark的执行环境入口对象是:类SparkContext的类对象

构建PySpark执行环境入口对象:

python 复制代码
# 导包
from pyspark import SparkConf, SparkContext

# 创建SparkConf类对象
conf = SparkConf().setMaster("local[*]").setAppName("test_spark_app")  # 链式调用的写法

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

# 打印PySpark的允许版本
print(sc.version)

# 停止SparkContext对象的运行(停止PySpark程序)
sc.stop()

RDD: 弹性分布式数据集

  1. python数据容器 转RDD对象

通过SpaarkContext对象的parallelize成员方法,将python数据容器转换为PySpark的RDD对象

  1. 读取文件数据 转RDD对象

通过SpaarkContext入口对象textFile()方法,来读取文件,来构建出RDD对象

通过PySpark代码加载数据,即数据输入:

python 复制代码
from pyspark import SparkConf, SparkContext

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

# 通过parallelize方法将python数据容器加载到spark内,成为RDD对象
rdd1 = sc.parallelize([1, 2, 3, 4, 5])
rdd2 = sc.parallelize((1, 2, 3, 4, 5))
rdd3 = sc.parallelize("abcdefg")
rdd4 = sc.parallelize({1, 2, 3, 4, 5})
rdd5 = sc.parallelize({"key1": "value1", "key2": "value"})

# 如果要查看RDD里面有什么内容,需要用collect()方法
print(rdd1.collect())  # [1, 2, 3, 4, 5]
print(rdd2.collect())  # [1, 2, 3, 4, 5]
print(rdd3.collect())  # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(rdd4.collect())  # [1, 2, 3, 4, 5]
print(rdd5.collect())  # ['key1', 'key2']

# 通过textFile方法,读取文件数据加载到spark内,成为RDD对象
rdd6 = sc.textFile("./test.txt")
print(rdd6.collect())  # ['123456', '123456', '123456']

sc.stop()

数据计算:

PySpark的数据计算,都是基于RDD对象来进行的,那么如何进行呢?

依赖,RDD对象内置丰富的 成员方法(算子)

map方法:

对RDD内的元素逐个处理,并返回一个新的RDD;接受一个处理函数,,可用lambda匿名函数快速编写

python 复制代码
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()

flatmap算子:

对rdd执行map操作,然后进行解除嵌套操作

python 复制代码
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']
相关推荐
躺平大鹅9 分钟前
5个实用Python小脚本,新手也能轻松实现(附完整代码)
python
yukai0800814 分钟前
【最后203篇系列】039 JWT使用
python
独好紫罗兰39 分钟前
对python的再认识-基于数据结构进行-a006-元组-拓展
开发语言·数据结构·python
Dfreedom.42 分钟前
图像直方图完全解析:从原理到实战应用
图像处理·python·opencv·直方图·直方图均衡化
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
怒放吧德德1 小时前
Python3基础:基础实战巩固,从“会用”到“活用”
后端·python
aiguangyuan2 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手2 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀2 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
kali-Myon2 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf