python大数据入门

文章目录

基础准备

首先需要安装pyspark库

cmd 复制代码
pip install pyspark

构建pyspark执行环境入口对象

pyspark的执行环境入口对象是:类SparkContext的类对象

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

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

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

# 打印PySpark的运行版本
print(sc.version)

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

数据输入

RDD对象

pyspark支持多种数据的输入,再输入完成后,都会得到一个RDD对象。

RDD全程:弹性分布式数据集(Resilient Distributed Datasets)

pyspark针对数据的处理,都是以RDD对象作为载体

  • 数据存储在RDD内
  • 各类数据的计算方法,也都是RDD的成员方法
  • RDD的数据计算方法,返回值依旧是RDD对象

pyspark支持通过SparkContext对象的parallelize成员方法,将lsittuplesetdictstr、转换为PySpark的RDD对象

python 复制代码
mylist = [1, 2, 3, 4]
rdd = sc.parallelize(mylist)
print(type(rdd))
print(rdd.collect())

读取文件转RDD对象

SparkContext对象中提供了一个textFile方法

python 复制代码
rdd = sc.textFile(File_path)

数据计算

map方法

pyspark的数据计算都是基于RDD对象来进行的,更具体地是依赖于RDD对象内置丰富的成员方法(算子)

map算子:map算子是将RDD的数据一条条处理(处理逻辑基于map算子中接收到的处理函数),返回新的RDD

语法:

python 复制代码
mylist = [1, 2, 3, 4, 5]
rdd = sc.parallelize(mylist)
def func(data):
  return data * 10
rdd2 = rdd.map(func)
print(rdd2.collect())

map中传递一个函数,并且将rdd中的每一个元素都传递给这个函数去计算,这个函数需要返回一个元素,函数需要根据具体逻辑。

map中的函数是(T->U),这表示的是传入参数和返回值不需要类型一样

python 复制代码
# 链式调用
rdd3 = rdd.map(lambda x: x * 10).map(lambda x: x + 5)
print(rdd3.collect())

flatMap方法

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

python 复制代码
# 嵌套了list
lst = [[1, 2, 3], [4, 5, 6]. [7, 8, 9]]

# 如果解除了嵌套
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
python 复制代码
# 准备一个RDD
rdd = sc.parallelize(["1 1 1", "2 2 2", "3 3 3"])

# 需求将RDD数据里面的一个个单词提取出阿里
rdd2 = rdd.map(lambda x: x.split(" "))
print(rdd2.collect())
python 复制代码
# 准备一个RDD
rdd = sc.parallelize(["1 1 1", "2 2 2", "3 3 3"])

# 需求将RDD数据里面的一个个单词提取出阿里
rdd2 = rdd.flatMap(lambda x: x.split(" "))
print(rdd2.collect())

reduceByKey方法

reduceByKey算子 :针对KV型 RDD,自动按照key分组 ,然后根据提供的聚合逻辑,完成组内数据(value)的聚合操作

  • KV数据就是二元元组
  • spark中对二元元组的划分,第一个元素叫k,第二个元素叫v
python 复制代码
rdd.reduceByKey(func)
# func:(V, V) -> V
#接受2个传入参数(类型要一致),返回一个返回值,类型和传入要求一致
python 复制代码
# 准备一个RDD
rdd = sc.parallelize([('男', 99), ('男', 88), ('女', 88), ('女', 66)])

# 需求将RDD数据里面的一个个单词提取出阿里
rdd2 = rdd.reduceByKey(lambda a, b: a + b)
print(rdd2.collect())

filter方法

功能:过滤想要的数据进行保留

python 复制代码
radd.filter(func)
# func: (T) -> bool 传入1个参数进来随意类型,返回值必须是True or False

案例:过滤掉奇数,留下偶数

python 复制代码
# 准备一个RDD
rdd = sc.parallelize([1, 2, 3, 4, 5, 6])

def func(a):
  if a % 2 == 0:
    return True
  else:
    return False
rdd2 = rdd.filter(func)
print(rdd2.collect())

distinct方法

功能:对RDD数据进行去重,返回新的RDD

语法:

python 复制代码
# 无需传参
rdd.distinct() 
python 复制代码
# 准备一个RDD
rdd = sc.parallelize([1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 5, 6])

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

sortBy方法

功能:对RDD数据进行排序,基于你指定的排序依据

语法:

python 复制代码
rdd.sortBy(func, ascending=False,bunPartitions=1)
# func:(T) -> U:告知按照rdd中的哪个数据进行排序,比如lambda x: x[1] 表示按照rdd中的第二列元素进行排序
# ascending True 升序 False 降序
# numPartitions:用多少分区排序

数据输出

collect算子

功能:将RDD各个分区内的数据,同意收集到Driver中,形成一个List对象

用法:

python 复制代码
rdd.collect()
# 返回值是一个list

reduce算子

功能:对RDD数据集按照传入的逻辑进行聚合

语法:

python 复制代码
rdd.reduce(func)
# func:(T, T) -> T
# 2参数传入 1个返回值, 返回值和参数要求类型一致

代码:

python 复制代码
rdd =sc.parallelize(range(1, 10))
# 将rdd的数据机型累加求和
print(rdd.reduce(lambda a, b: a + b))

take算子

功能:取RDD的前N个元素,组合成list返回

用法:

python 复制代码
sc.parallelize([3, 2, 1, 4, 5, 6]).take(5)

count算子

python 复制代码
num_count = sc.parallelize([3, 2, 1, 4, 5, 6]).count()

# 

saveAsTextFile算子

功能:将RDD的数据写入文本文件中,支持本地写粗,hdfs等文件系统

python 复制代码
rdd = sc.parallelize([1, 2, 3, 4 ,5])
rdd.savaAsTextFile(file_name)

修改rdd分区为1

方式1:SparkConf对象设置属性全局并行度为1

python 复制代码
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
conf.set('spark.default.parallelism', 1)
sc = SparkContext(conf=conf)

方式2, 创建rdd的时候设置(parallelize方法传入num Slices参数为1)

python 复制代码
rdd1 = sc.parallelize([1, 2, 3, 4, 5], numSlices=1)
# numSlices可以省略
rdd1 = sc.parallelize([1, 2, 3, 4, 5], 1)
相关推荐
健康的猪2 分钟前
golang的cgo的一点小心得
开发语言·后端·golang
Lalolander4 分钟前
装备制造企业选型:什么样的项目管理系统最合适?
大数据·制造·工程项目管理·装备制造·epc项目管理·项目成本管控·业财一体化
夜夜敲码24 分钟前
C语言教程(十六): C 语言字符串详解
c语言·开发语言
宋康30 分钟前
C语言结构体和union内存对齐
c语言·开发语言
逢生博客35 分钟前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
居然是阿宋40 分钟前
Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
android·开发语言·kotlin
堕落似梦42 分钟前
Pydantic增强SQLALchemy序列化(FastAPI直接输出SQLALchemy查询集)
python
island13141 小时前
【git#4】分支管理 -- 知识补充
大数据·git·elasticsearch
LCHub低代码社区1 小时前
钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
大数据·人工智能·维格云·ai智能体·ai自动化·大禹智库·钧瓷码
Cao1234567893211 小时前
简易学生成绩管理系统(C语言)
c语言·开发语言