Spark基础 | RDD编程

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

两种方式:

  1. 读取外部数据集
    val lines = sc.textFile(“./README.md”)
  2. 在驱动器程序中对一个集合进行并行化
    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包中的任一函数接口的对象来传递。根据不同的返回类型,定义了一些不同的接口。

猜你喜欢

转载自blog.csdn.net/jh_zhai/article/details/79966433