「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
如何构建RDD
构建RDD对象的方式主要有二种:
通过 parallelize('''') API 来构建RDD对象
通过加载外部数据集的方式构建: textFile(....)
1 通过并行化方式来构建RDD
代码演示:
from pyspark import SparkContext,SparkConf
import os
# 目的: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ["SPARK_HOME"]="/export/server/spark"
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"
if __name__ == '__main__':
print("构建RDD对象: 方式一演示")
# 1) 构建sparkContext对象
# local[*]: * 表示当前环境中的cpu是几核的, * 就表示运行多少个线程
conf = SparkConf().setMaster("local[*]").setAppName("init0")
sc = SparkContext(conf=conf)
#2) 通过 paralleleize 获取RDD对象
# 通过初始化数据集方式来构建一个RDD对象
rdd = sc.parallelize(["张三", "李四", "王五", "赵六", "田七"],6)
#rdd = sc.parallelize(range(10))
rdd2 = rdd.map(lambda name: (name, 1))
#3) 打印这个RDD对象中数据
# getNumPartitions() 是用于获取当前这个rdd有多少个分区数
# glom() : 获取每一个分区的数据
print(rdd2.getNumPartitions())
print(rdd2.glom().collect())
说明:
1) 默认情况下, 分区数量取决于 Master参数设置, 以及linux服务器的cpu的数量设置
2) 支持手动设置数据的分区数量:
parallelize(初始数据集, 分区数量)
3) 如何获取分区数量:getNumPartitions()
4) 如果获取每一个分区下的数据: glom().collect()
2 通过外部数据方式构建RDD
如何设置 pycharm的python脚本模板:
from pyspark import SparkContext, SparkConf
import os
# 目的: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ["SPARK_HOME"] = "/export/server/spark"
os.environ["PYSPARK_PYTHON"] = "/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"] = "/root/anaconda3/bin/python"
if __name__ == '__main__':
print("python core 模板")
代码实现:
from pyspark import SparkContext, SparkConf
import os
# 目的: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ["SPARK_HOME"] = "/export/server/spark"
os.environ["PYSPARK_PYTHON"] = "/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"] = "/root/anaconda3/bin/python"
if __name__ == '__main__':
print("演示构建RDD的第二种方式: 加载外部数据集")
# 1) 创建 sparkContext对象
conf = SparkConf().setMaster("local[*]").setAppName("init1")
sc = SparkContext(conf=conf)
#2) 构建RDD对象: 加载外部数据集
# 请问 : 这里的写的路径对不对? 1 2
# 注意: file:/// 本地路径 指的是 linux的本地路径 不是windows本地路径
# 注意:
# 在加载外部数据集, 如果数据是本地路径,文件有多少个, 自动划分多少个分区数, 如果加载HDFS, 有多少个block 对应就有多少个分区
# 注意: 如果文件的分区数量小于了 local[*]的数量, 依然会以local[*]数量为标准
rdd = sc.textFile("file:///export/data/workspace/_02_pyspark_core/data/")
# 3) 打印 rdd数据
print(rdd.getNumPartitions())
print(rdd.glom().collect())