目录

  • RDD的创建
  • 三种方式
  • 从一个集合中创建
  • 从文件中创建
  • 从其他的RDD转化而来
  • RDD编程常用API
  • 算子分类
  • Transformation
  • 概述
  • 帮助文档
  • 常用Transformation表
  • Transformation使用实例
  • Action
  • 帮助文档
  • 常用Action表
  • Action使用实例



RDD的创建

三种方式

从一个集合中创建
val rdd1 = sc.parallelize(Array(1,2,3,4,5,6,7,8))
从文件中创建
val rdd2 = sc.textFile("/words.txt")
从其他的RDD转化而来
val rdd3=rdd2.flatMap(_.split(" "))

RDD编程常用API

算子分类

Transformation
概述

Transformation —— 根据数据集创建一个新的数据集,计算后返回一个新的RDD,但不会直接返回计算结果,二是记住这些应用到数据集(例如一个文件)上的转换动作,只有当发生一个要求返回结果给Driver的动作是,这些转换才会真正运行。

帮助文档

http://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#transformations

常用Transformation表

创建SPARKSESSION java代码_spark

Transformation使用实例
map(func)将分区里面每一条数据取出来,进行处理

创建SPARKSESSION java代码_数据_02

filter(func)

创建SPARKSESSION java代码_scala_03

flatMap(func)

创建SPARKSESSION java代码_数据集_04

mapPartitions(func)一次性将一个分区里面的数据全部取出来。效率更高

创建SPARKSESSION java代码_scala_05

mapPartitionsWithIndex(func)

创建SPARKSESSION java代码_spark_06

sample(withReplacement, fraction, seed)

创建SPARKSESSION java代码_scala_07

union(otherDataset)

创建SPARKSESSION java代码_scala_08

intersection(otherDataset)

创建SPARKSESSION java代码_spark_09

distinct([numTasks]))

创建SPARKSESSION java代码_spark_10

partitionBy重新分区,分区数可以手动指定的。分区可能变多也可能变少,而且partitionBy还会产生shuffle过程

创建SPARKSESSION java代码_spark_11

reduceByKey(func, [numTasks])效率更高,会对数据提前进行部分的聚合,减少数据的key的shuffle

创建SPARKSESSION java代码_spark_12

groupByKey效率低下,尽量不要用

创建SPARKSESSION java代码_大数据_13

combineByKey

创建SPARKSESSION java代码_spark_14

aggregateByKey(zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)

创建SPARKSESSION java代码_数据_15

foldByKey(zeroValue: V)(func: (V, V) => V): RDD[(K, V)]

创建SPARKSESSION java代码_scala_16

sortByKey([ascending], [numTasks])

创建SPARKSESSION java代码_数据集_17

sortBy(func,[ascending], [numTasks])

创建SPARKSESSION java代码_scala_18

join(otherDataset, [numTasks])

创建SPARKSESSION java代码_大数据_19

cogroup(otherDataset, [numTasks])

创建SPARKSESSION java代码_数据集_20

cartesian(otherDataset)

创建SPARKSESSION java代码_scala_21

coalesce(numPartitions)缩减分区数到指定的值,分区的个数只能减少,不能变多。不会产生shuffle过程 适用于一些大的数据集filter过滤之后,进行缩减分区,提高效率 1280M数据 ==> 10个block块 ==> 10个分区,每个分区128M数据 ==> filter ==> 10个分区,每个分区里面剩下了1KB数据 ==> coalesce => 1个分区

创建SPARKSESSION java代码_spark_22

repartition(numPartitions)数据随机洗牌冲洗分区,没有任何规则,可以将分区数变大,或者变小,会产生shuffle的过程

创建SPARKSESSION java代码_scala_23

glom

创建SPARKSESSION java代码_大数据_24

mapValues

创建SPARKSESSION java代码_大数据_25

subtract

创建SPARKSESSION java代码_数据_26

 

Action
帮助文档

http://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#actions

常用Action表

创建SPARKSESSION java代码_数据集_27

Action使用实例
reduce(func)

创建SPARKSESSION java代码_spark_28

collect()

创建SPARKSESSION java代码_scala_29

count()

创建SPARKSESSION java代码_spark_30

first()

创建SPARKSESSION java代码_spark_31

take(n)

创建SPARKSESSION java代码_spark_32

takeSample(withReplacement,num, [seed])

创建SPARKSESSION java代码_scala_33

takeOrdered(n)

创建SPARKSESSION java代码_spark_34

aggregate (zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)

创建SPARKSESSION java代码_spark_35

fold(num)(func)

创建SPARKSESSION java代码_spark_36

countByKey

创建SPARKSESSION java代码_大数据_37

foreach(func)

创建SPARKSESSION java代码_spark_38

这里没有列出所有的算子,更多算子可以到RDD的源码中查看