欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

学习Spark基础你必须了解的RDD编程

程序员文章站 2022-09-28 16:37:55
Spark对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称RDD) 在Spark中,对数据的所有操作无外乎创建R...

Spark对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称RDD)
在Spark中,对数据的所有操作无外乎创建RDD、转化已有RDD以及调用RDD操作进行求值。

1 RDD基础

Spark中的RDD就是一个不可变的分布式对象集合。

每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。

RDD支持两种类型的操作:

转化操作transformation)和行动操作action)

转化操作和行动操作的区别在于Spark计算RDD的方式不同。虽然你可以在任何时候定义新的RDD,但Spark只会惰性计算这些RDD。它们只有第一次在一个行动操作中用到时,才会真正计算。

默认情况下,SparkRDD会在你每次对它们进行行动操作时重新计算。

默认不进行持久化对于大规模数据集是很有意义的:如果不会重用该RDD,我们就没有必要浪费存储空间,Spark可以直接遍历一遍数据然后计算结果。

2 创建RDD

两种方式:

读取外部数据集;

val lines = sc.textFile(“./README.md”) 在驱动器程序中对一个集合进行并行化

val lines = sc.parallelize(list(“pandas”, “i like it”))

3 RDD操作

转化操作是返回一个新的RDD的操作,比如map() filter()。

行动操作是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际计算,比如count() first()。

4 向Spark传递函数

python 可以使用 lambda 表达式。

scala 可以把定义的内联函数、方法的引用或静态方法传递给spark。

所传递的函数及其引用的数据需要是可序列化的。

如果Scala中出现NotSerializableException,通常问题就在于我们传递了一个不可序列化的类中的函数或字段。

Java 函数需要作为实现Spark的org.apache.apark.api.java.function包中的任一函数接口的对象来传递。根据不同的返回类型,定义了一些不同的接口。