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)
相关推荐
nananaij几秒前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien6 分钟前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
阿蒙Amon10 分钟前
为什么 12 版仍封神?《C# 高级编程》:从.NET 5 到实战架构,进阶者绕不开的必修课
开发语言·c#
无小道12 分钟前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
爱莉希雅&&&20 分钟前
技术面试题,HR面试题
开发语言·学习·面试
敲键盘的小夜猫1 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
开开心心_Every1 小时前
便捷的Office批量转PDF工具
开发语言·人工智能·r语言·pdf·c#·音视频·symfony
高压锅_12201 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
爱吃面的猫1 小时前
大数据Hadoop之——Flink1.17.0安装与使用(非常详细)
大数据·hadoop·分布式
Fireworkitte2 小时前
安装 Elasticsearch IK 分词器
大数据·elasticsearch