pyspark 之 rdd操作

1、rdd 简介

什么是rdd?从官网和一些技术博客上我们都可以看到这样的介绍

RDD叫做弹性分布式数据集(resilient distributed dataset) ,是Spark中最基本的数据抽象,它是跨集群节点分区的元素集合,可以并行操作。

官网举例如下:

## 构建包含应用信息的SparkConf对象
conf = SparkConf().setAppName(appName).setMaster(master)
## 创建SparkContext对象,Spark通过它访问集群
sc = SparkContext(conf=conf)
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

如上所示,集合data的元素被复制并形成可以并行化操作的分布式数据集,即创建了一个包含数字1到5的并行化集合。

因此可以简单理解为RDD为对输入集合的一种封装,如java使用对象进行封装,Spark将输入数据封装为分布式集合(RDD),方便数据进行分布式计算。 如下图所示:

pyspark 之 rdd操作_第1张图片
RDD将任务分解为不同的子任务,使用多台计算机分布式执行,最后将计算结果整合。

为什么需要RDD呢?之前wordcount(大数据计算)使用原生集合只支持单机版,如果要做分布式计算,需要做很多额外的工作,如线程\进程通信,容错、自动均衡等。所以需要有一个分布式的数据抽象,也就是用该抽象,可以表示分布式的集合,基于这个分布式集合进行操作,就可以很方便的完成分布式的wordcount。

pyspark 之 rdd操作_第2张图片

2、pyspark rdd操作

1、创建SparkContext对象

Spark 程序必须做的第一件事是创建一个 SparkContext 对象,它告诉 Spark 如何访问集群。 要创建 SparkContext,首先需要构建一个 SparkConf 对象,其中包含有关您的应用程序的信息。每个 JVM 应该只有一个 SparkContext 处于活动状态。在创建新的 SparkContext 之前,必须停止活动的 SparkContext。

pyspark 之 rdd操作_第3张图片

如图所示,SparkContext处于DriverProgram核心位置,所有与Cluster、Worker Node交互的操作都需要SparkContext来完成

## 构建包含应用信息的SparkConf对象
conf = SparkConf().setAppName(appName).setMaster(master)
## 创建SparkContext对象,Spark通过它访问集群
sc = SparkContext(conf=conf)

2、读取文件

## 1、对于list 直接创建
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

## 2、读取文件
distFile = sc.textFile("data.txt")

3、rdd操作

作用于RDD上的Operation分为transformantion和action。 经Transformation处理之后,数据集中的内容会发生更改转换成为其它类型的RDD(由数据集A转换成为数据集B);而经Action处理之后,数据集中的内容会被归约为一个具体的数值。

只有当RDD上有action时,该RDD及其父RDD上的所有operation才会被提交到cluster中真正的被执行。

rdd transformations操作

rdd actions操作

当action作用于转换之后RDD时,会调用SparkContext的runJob方法。

你可能感兴趣的:(Spark)