Spark练习-RDD创建,读取hdfs上的数据,指定rdd分区

目录

RDD的创建

读取HDFS上文件数据

RDD分区指定


RDD的创建

将python数据转为rdd

python 复制代码
# 将Python数据转为rdd
data = [1,2,3,4]
res = sum(data) # 使用python的方法计算时,采用的单机资源计算,如果数据量较大时,可以将python数据转为spark的rdd数据,就可以借助spark的进行的分布式计算
print(res)

将python的列表转换为rdd

python 复制代码
# 将pytho的列表数据转为rdd,需要使用pyspark中的sparkcontext类,该类中封装转化方法
from pyspark import SparkContext

# 1-先将类生成对象
# master 可以指定资源调度方式   不指定默认是local
# sc = SparkContext(master='yarn')
sc = SparkContext()

# 2-使用对象方法将python的列表转为rdd
# parallelize 将python的列表 ,元组,字典,转为 rdd,常用列表
rdd = sc.parallelize(data)

# 3-使用rdd提供的方法进行分布式聚合计算
res1 = rdd.reduce(lambda x,y:x+y)
# 查看计算结果
print(res1)

读取HDFS上文件数据

首先需要在hdfs的data目录下上传数据

读取hdfs的文件数据

python 复制代码
# 创建rdd
# 读取hdfs的文件转换为rdd
from pyspark import SparkConf, SparkContext

# 1-创建对象
sc = SparkContext()

# 2-读取hdfs的文件数据
# 指定读取的文件路径
rdd1 = sc.textFile('hdfs://node1:8020/data/stu.txt')
# 指定读取目录,可以读取目录下的所有文件数据
rdd2 = sc.textFile('hdfs://node1:8020/data')


# 3-查看rdd中读取数据
res = rdd1.collect()
print(res)

res = rdd2.collect()
print(res)

读取单个文件,值输出指定文件的数据

读取到目录,会将整个目录的文件都读取到

RDD分区指定

python数据转换rdd指定分区

python 复制代码
from pyspark import SparkContext
# 数据在转化为rdd时,可以指定拆成多少个分区,也就是拆成多少份
# python数据转为rdd时指定分区数据
# 1-创建对象
sc = SparkContext()

data = [1,3,5,8,11,6,5,19]

# 2-指定分区数
# 转化rdd时指定分区数
# numSlices 指定分区的数量
rdd = sc.parallelize(data,numSlices=4)  # [[1, 3], [5, 8], [11, 6], [5, 19]]
rdd = sc.parallelize(data,numSlices=6) #  [[1], [3], [5, 8], [11], [6], [5, 19]]

# 查看分区后的数据形式  glom()查看分区形式
res = rdd.glom().collect()
print(res)

如果指定的分区数量不能够整除,则会随机分配

读取hdfs上的数据

python 复制代码
from pyspark import SparkContext
# 数据在转化为rdd时,可以指定拆成多少个分区,也就是拆成多少份
# python数据转为rdd时指定分区数据
# 1-创建对象
sc = SparkContext()
# 读取的文件指定分区数
# 文件在进行分区时,有时候会多一个空分区
# 文件大小%3 = 值 -- 余数
# 余数/值  占比  超过10%额外会创建一个空分区

rdd2 = sc.textFile("hdfs://node1:8020/data/stu.txt",minPartitions=4) # [['1,alice,F'], ['2,Tom,M'], ['3,lili,F'], []]
# rdd2 = sc.textFile("hdfs://node1:8020/data/stu.txt",minPartitions=2) # [['1,alice,F'], ['2,Tom,M'], ['3,lili,F']]

# 查看分区后的数据形式  glom()查看分区形式
res2 = rdd2.glom().collect()
print(res2)
复制代码
文件大小%3 = 值 -- 余数
余数/值  占比  超过10%额外会创建一个

28B % 4 = 6..4

4/6 > 10% 所以会出现一个空的分区


28B % 2 = 14...0

0/14 < 10% ,没有空分区

相关推荐
东莞和裕包装24 分钟前
如何管控广州定制纸箱生产中的啤切精度与印刷色差质量问题
大数据·运维·网络·人工智能
时下握今1 小时前
CDA一级认证|三大基础分析范式怎么理解?分类/链式/相关范式详解
大数据
xiaopai9452 小时前
从WPS工程项目管理表到工程项目管理系统:企业数字化升级的边界在哪里?
大数据·wps·工程项目管理·建米软件
肠畔码农2 小时前
深度解密 Redis 分布式锁:从单机原子语义到集群架构博弈
redis·分布式·架构
TMT星球3 小时前
伽利略机器人亮相WRC 2026,突破形态局限发布“陆行具身系统”Galileo X
大数据·人工智能·机器人
一只鹿鹿鹿4 小时前
数据资产管理解决方案(Word文件)
大数据·数据库·安全·web安全·系统安全
m0_638079624 小时前
2026年AI论文写作辅助工具技术对比与使用观察
大数据·人工智能
商业数据派4 小时前
日赚近1亿的网易,这个季度栽在了拼多多身上
大数据·人工智能
晓子文集4 小时前
Tushare接口文档:月线行情(monthly)
大数据·数据库·金融数据·量化投资·tushare
长谷深风1115 小时前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计