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

相关推荐
phac1238 分钟前
git 如何直接拉去远程仓库的内容且忽略本地与远端不一致的commit
大数据·git·elasticsearch
在未来等你11 分钟前
Elasticsearch面试精讲 Day 11:索引模板与动态映射
大数据·分布式·elasticsearch·搜索引擎·面试
正在走向自律12 分钟前
国产时序数据库选型指南-从大数据视角看透的价值
大数据·数据库·清华大学·时序数据库·iotdb·国产数据库
在未来等你26 分钟前
Kafka面试精讲 Day 14:集群扩容与数据迁移
大数据·分布式·面试·kafka·消息队列
哥哥还在IT中1 小时前
Elasticsearch优化从入门到精通
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客1 小时前
使用 cloud-native Elasticsearch 与 ECK 运行
大数据·数据库·elasticsearch·搜索引擎·kubernetes·k8s·全文检索
村雨遥2 小时前
Flink 状态管理的核心能力
大数据·flink
qq_508823408 小时前
金融量化指标--2Alpha 阿尔法
大数据·人工智能
好家伙VCC9 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
^辞安11 小时前
RocketMQ为什么自研Nameserver而不用zookeeper?
分布式·zookeeper·rocketmq