spark的rdd介绍和应用

1.rdd介绍

  • RDD是spark的一种数据模型(规定数据的存储结构和计算方法)

  • RDD是将数据分布式存储在不同服务器的内存上,通过RDD共享不同服务器的内存数据

  • 所以Spark是基于内存进行分布式数据计算的框架

1.1 rdd特点

  • 分区

    • 可以将计算的海量数据分成多份,需要分成多少可分区可以通过方法指定

    • 每个分区都可以对应一个task线程执行计算

  • 只读

    • rdd中的数据不能直接修改,需要通过方法计算后得到一个新的rdd

    • rdd本身存储的数只能读取

  • 依赖

    • rdd之间是有依赖关系的

    • 新的rdd是通过旧的rdd计算得到

  • 缓存

    • 可以将计算的中结果缓存起来,如果后续计算错误时,可以从缓存位置重新计算

    • 将数据存储在内存或本地磁盘

    • 作用是容错

    • 缓存在执行计算任务程序结束后会释放删除

  • checkpoint

    • 作用和缓存一样

    • checkpoint可以将数据存储在分布式存储系统中,比如hdfs

2.rdd的应用

2.1创建rdd

复制代码
# 导入sparkcontext
from pyspark import SparkContext
# 创建SparkContext对象
sc = SparkContext()
# 将Python数据转为rdd
data_list = [1, 2, 3, 4]
rdd = sc.parallelize(data_list)
# rdd的数据输出展示
# 获取所有rdd数据
res = rdd.collect()
print(res)

2.2hdfs数据转为rdd

复制代码
# 将读取的hdfs文件数据转为rdd
from pyspark import SparkContext

# 生成SparkContext类对象
sc = SparkContext()
# 读取文件数据转为rdd
rdd  = sc.textFile('hdfs://node1:8020/data')#数据文件在hdfs的存储路径
# 查看数据
res = rdd.collect()
print(res)

2.3rdd的分区

复制代码
# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext()

# 创建生成rdd是可以指定分区数
# Python数据转为rdd指定
# numSlices 可以指定分区数
rdd_py = sc.parallelize([1,2,3,4,5,6],numSlices=3)
# 查看rdd分区数据
res  = rdd_py.glom().collect()
print(res)

2.4小文件数据读取

复制代码
# 导入sparkcontext
from pyspark import SparkContext

# 创建SparkContext对象
sc = SparkContext(master='yarn')
# rdd = sc.textFile('hdfs://node1:8020/data')
# rdd计算
# wholeTextFiles 会合并小文件数据
# minPartitions 指定分区数
rdd_mini = sc.wholeTextFiles('hdfs://node1:8020/data',minPartitions=1)

# 展示数据
# res1 = rdd.glom().collect()
# print(res1)

res2 = rdd_mini.glom().collect()
print(res2)
相关推荐
专注数据的痴汉1 小时前
「数据获取」全国民用运输机场吞吐量排名(2006-2024)
java·大数据·服务器·数据库·信息可视化
子非衣1 小时前
CenOS7安装RabbitMQ(含延迟队列插件)
分布式·rabbitmq·ruby
和你一起去月球1 小时前
Agent 应用开发与落地学习总结
大数据·ai·大模型·agent·agentic
JZC_xiaozhong1 小时前
分析型数据库 ClickHouse 在数据中台中的集成
大数据·数据库·clickhouse·架构·数据一致性·数据孤岛解决方案·数据集成与应用集成
说私域1 小时前
基于AI智能名片链动2+1模式预约服务商城小程序的数据管理与系统集成研究
大数据·人工智能·小程序
linweidong1 小时前
中科曙光Java后端开发面试题及参考答案
分布式·设计模式·spring mvc·tcp协议·三次握手·后端开发·java面经
AC赳赳老秦1 小时前
技术文档合著:DeepSeek辅助多人协作文档的风格统一与内容补全
android·大数据·人工智能·微服务·golang·自动化·deepseek
安达发公司2 小时前
安达发|煤炭行业APS高级排产:开启高效生产新时代
大数据·人工智能·aps高级排程·安达发aps·车间排产软件·aps高级排产
中科天工2 小时前
如何实现工业4.0智能制造的自动化包装解决方案?
大数据·人工智能·智能
沃达德软件2 小时前
警务指挥情报中心建设
大数据·数据仓库·数据库开发