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)
相关推荐
以卿a19 分钟前
C++ 模板初阶
开发语言·c++
s:10323 分钟前
【框架】参考 Spring Security 安全框架设计出,轻量化高可扩展的身份认证与授权架构
java·开发语言
道不尽世间的沧桑1 小时前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
久绊A1 小时前
Python 基本语法的详细解释
开发语言·windows·python
Hylan_J5 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
软件黑马王子5 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
莫忘初心丶5 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
闲猫5 小时前
go orm GORM
开发语言·后端·golang
李白同学6 小时前
【C语言】结构体内存对齐问题
c语言·开发语言
黑子哥呢?8 小时前
安装Bash completion解决tab不能补全问题
开发语言·bash