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% ,没有空分区

相关推荐
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-02-08
大数据·人工智能·经验分享·搜索引擎·产品运营
玄同7653 小时前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作
瑞华丽PLM4 小时前
电子行业国产PLM系统功能差异化对比表
大数据·plm·国产plm·瑞华丽plm·瑞华丽
深圳市恒星物联科技有限公司5 小时前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
是做服装的同学6 小时前
如何选择适合的服装企业ERP系统才能提升业务效率?
大数据·经验分享·其他
藦卡机器人7 小时前
国产机械臂做的比较好的品牌有哪些?
大数据·数据库·人工智能
代码改善世界7 小时前
CANN深度解构:中国AI系统软件的原创性突破与架构创新
大数据·人工智能·架构
java-yi8 小时前
Elasticsearch(ES)核心用法与实战技巧分享
大数据·elasticsearch·搜索引擎
程序猿阿伟8 小时前
《分布式追踪Span-业务标识融合:端到端业务可观测手册》
分布式