Spark RDD操作

Spark RDD操作

RDD提供了两种类型的操作:

  • 转换
  • 动作

转换

在Spark中,转换的作用是从现有的数据集中创建一个新的数据集。转换是延迟计算的,只有当动作需要将结果返回给驱动程序时才会计算。

让我们看一些经常使用的RDD转换操作。

转换 描述
map(func) 通过将源的每个元素传递给函数func,返回一个新的分布式数据集。
filter(func) 返回一个新的数据集,由源上那些func返回true的元素组成。
flatMap(func) 这里,每个输入项可以映射到零个或多个输出项,所以func应该返回一个序列而不是单个项。
mapPartitions(func) 它类似于map,但在RDD的每个分区(块)上分别运行,因此当在类型T的RDD上运行时,func必须是Iterator => Iterator类型的。
mapPartitionsWithIndex(func) 类似于mapPartitions函数,它提供了一个整数值作为表示分区索引的参数给func函数,因此当在类型为T的RDD上运行时,func必须是类型为(Int, Iterator) => Iterator _的函数。
sample(withReplacement, fraction, seed) 使用给定的随机数生成器种子,根据指定的抽样比例fraction,对数据进行抽样,可以选择是否有放回地进行抽样。
union(otherDataset) 返回一个包含源数据集和参数数据集中元素的并集的新数据集。
intersection(otherDataset) 返回一个包含源数据集和参数数据集中元素的交集的新RDD。
distinct([numPartitions])) 它返回一个包含源数据集不同元素的新数据集。
groupByKey([numPartitions]) 当在一个(K, V)对的数据集上调用时,它返回一个(K, Iterable )对的数据集。
reduceByKey(func, [numPartitions]) 当在一个(K, V)对的数据集上调用时,它返回一个(K, V)对的数据集,其中每个键的值使用给定的reduce函数func进行聚合,该函数的类型必须是(V, V) => V。
aggregateByKey(zeroValue)(seqOp, combOp, [numPartitions]) 当在一个(K, V)对的数据集上调用时,它返回一个(K, U)对的数据集,其中每个键的值使用给定的组合函数和一个中性的“零”值进行聚合。
sortByKey([ascending], [numPartitions]) 返回按键以升序或降序排序的键值对数据集,根据布尔类型的ascending参数指定。
join(otherDataset, [numPartitions]) 在键值对类型的数据集(K, V)和(K, W)上调用时,返回一个(K, (V, W))对的数据集,其中包含每个键的所有元素对。通过leftOuterJoin、rightOuterJoin和fullOuterJoin操作也支持外连接。
cogroup(otherDataset, [numPartitions]) 在键值对类型的数据集(K, V)和(K, W)上调用时,返回一个(K, (Iterable , Iterable ))元组的数据集。该操作也称为groupWith。
cartesian(otherDataset) 当对类型为T和U的数据集调用时,返回一个(T, U)对组成的数据集(所有元素的所有组合对)。
pipe(command,[envVars]) 将RDD的每个分区通过一个shell命令进行管道处理,例如Perl或bash脚本。
coalesce(numPartitions) 将RDD中的分区数量减少到numPartitions。
repartition(numPartitions) 将RDD中的数据随机重新分区,以创建更多或更少的分区,并在它们之间进行平衡。
repartitionAndSortWithinPartitions(partitioner) 根据给定的partitioner重新分区RDD,并在每个结果分区内按键对记录进行排序。

操作

在Spark中,操作的作用是在数据集上运行计算后将一个值返回给驱动程序。

让我们来看一些常用的RDD操作。

作用 描述
reduce(func) 使用函数func来聚合数据集的元素(func接受两个参数并返回一个)。该函数应该可交换和可结合,以便可以正确并行计算。
collect() 将数据集的所有元素作为数组返回给驱动程序。在筛选或返回数据的其他操作之后通常很有用,这些操作返回的数据子集足够小。
count() 返回数据集中的元素个数。
first() 返回数据集的第一个元素(类似于take(1))。
take(n) 返回数据集的前n个元素的数组。
takeSample(withReplacement, num, [seed]) 返回数据集中的num个随机样本的数组,可选择是否进行替换,可选择预先指定的随机数生成器种子。
takeOrdered(n, [ordering]) 使用自然顺序或自定义比较器返回RDD的前n个元素。
saveAsTextFile(path) 用于将数据集的元素写入文本文件(或一组文本文件)到给定目录中的本地文件系统、HDFS或其他Hadoop支持的文件系统。Spark会对每个元素调用toString方法将其转换为文件中的一行文本。
saveAsSequenceFile(path) (Java和Scala 将数据集的元素以Hadoop SequenceFile的格式写入到给定路径的本地文件系统、HDFS或其他Hadoop支持的文件系统中。
saveAsObjectFile(path) (Java和Scala 使用Java序列化将数据集的元素以简单的格式写入,然后可以使用SparkContext.objectFile()进行加载。
countByKey() 仅适用于(K, V)类型的RDD。因此,返回一个包含每个键的计数的(K, Int)哈希映射。
foreach(func) 对数据集的每个元素运行函数func,以进行更新累加器或与外部存储系统交互等副作用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程