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

相关推荐
字节数据平台3 分钟前
火山引擎Data Agent再拓新场景,重磅推出用户研究Agent
大数据·人工智能·火山引擎
qqxhb1 小时前
系统架构设计师备考第45天——软件架构演化评估方法和维护
分布式·缓存·系统架构·集群·cdn·单体·已知未知评估
铭毅天下3 小时前
Elasticsearch 到 Easysearch 数据迁移 5 种方案选型实战总结
大数据·elasticsearch·搜索引擎·全文检索
跨境小新3 小时前
Facebook广告投放:地域定向流量不精准?x个优化指南
大数据·facebook
ZKNOW甄知科技3 小时前
客户案例 | 派克新材x甄知科技,构建全场景智能IT运维体系
大数据·运维·人工智能·科技·低代码·微服务·制造
币须赢4 小时前
688758赛分科技 阴上阴形态 洗盘上涨?
大数据
学掌门4 小时前
大数据知识合集之预处理方法
大数据
库库8395 小时前
Redis分布式锁、Redisson及Redis红锁知识点总结
数据库·redis·分布式
Elastic 中国社区官方博客6 小时前
Elasticsearch 推理 API 增加了开放的可定制服务
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
蒙特卡洛的随机游走6 小时前
Spark核心数据(RDD、DataFrame 和 Dataset)
大数据·分布式·spark