当前位置: 首页 > news >正文

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执行环境入口对象:

# 导包
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对象
2. 读取文件数据 转RDD对象
通过SpaarkContext入口对象textFile()方法,来读取文件,来构建出RDD对象

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

from pyspark import SparkConf, SparkContextconf = 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匿名函数快速编写

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操作,然后进行解除嵌套操作

from pyspark import SparkConf, SparkContextconf = 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']

http://www.lryc.cn/news/193626.html

相关文章:

  • Windows端口号被占用的查看方法及解决办法
  • Web3 整理React项目 导入Web3 并获取区块链信息
  • 基于SpringBoot的旅游网站开题报告
  • 基于SSM的班级事务管理系统
  • 基于Spring Boot开发的汽车租赁管理系统
  • 精品基于django的高校竞赛比赛管理系统Python
  • RustDay04------Exercise[01-10]
  • ARM day9
  • 【TensorFlow2 之013】TensorFlow-Lite
  • Java基础--阳光总在风雨后,请相信彩虹
  • 高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求
  • Discuz大气游戏风格模板/仿lol英雄联盟游戏DZ游戏模板GBK
  • 206、SpringBoot 整合 RabbitMQ 的自动配置类 和 对应的属性处理类 的知识点
  • 网络链接失败怀疑是服务器处于非正常状态?如何用本地电脑查看服务器是否正常?
  • 文件操作(打开关闭文件、文件顺序以及随机读写)
  • HTTP 响应头 X-Frame-Options
  • MongoDB 集群配置
  • random生成随机数的灵活运用
  • 宏定义实现二进制数的奇偶位交换
  • 【ELK 使用指南】ELK + Filebeat 分布式日志管理平台部署
  • 传输层 | UDP协议、TCP协议
  • Webmin(CVE-2019-15107)远程命令执行漏洞复现
  • 嵌入式实时操作系统的设计与开发 (前后台系统)
  • Macos数字音乐库:Elsten Software Bliss for Mac
  • 基于SpringBoot的校园周边美食探索及分享平台的设计与实现
  • GPT-4V的图片识别和分析能力
  • 蓝桥杯(等差素数列,C++)
  • Ceph 中的写入放大
  • Mabatis-puls强于Mybatis的地方
  • vue项目npm intall时发生版本冲突的解决办法