本文概述
RDD提供两种类型的操作:
- 转型
- 行动
转型
在Spark中, 转换的作用是从现有数据集中创建新数据集。转换被认为是惰性的, 因为它们仅在动作需要将结果返回给驱动程序时才计算。
让我们看一些常用的RDD转换。
转型 | 描述 |
---|---|
map(func) | 它返回一个新的分布式数据集, 该数据集是通过将源的每个元素传递给函数func形成的。 |
filter(func) | 它返回一个新的数据集, 该数据集是通过选择源中func返回true的那些元素形成的。 |
flatMap(func) | 在这里, 每个输入项都可以映射到零个或多个输出项, 因此func应该返回一个序列而不是单个项。 |
mapPartitions(func) | 它与map相似, 但是分别在RDD的每个分区(块)上运行, 因此当在类型T的RDD上运行时func必须为Iterator <T> => Iterator <U>类型。 |
mapPartitionsWithIndex(func) | 它与mapPartitions相似, 后者为func提供表示分区索引的整数值, 因此当在类型T的RDD上运行时, func的类型必须为(Int, Iterator <T>)=> Iterator <U>。 |
sample(withReplacement, fraction, seed) | 它使用给定的随机数生成器种子对数据的分数部分进行抽样, 无论是否进行替换。 |
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)对的数据集, 其中每个键的值使用给定的Combine函数和中性的“零”值进行汇总。 |
sortByKey([ascending], [numPartitions]) | 它返回键-值对的数据集, 按布尔值升序参数中指定的键值对按升序或降序排序。 |
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]) | 通过shell命令通过管道传输RDD的每个分区Perl或bash脚本。 |
coalesce(numPartitions) | 它将RDD中的分区数减少到numPartitions。 |
repartition(numPartitions) | 它将随机地重新随机排列RDD中的数据, 以创建更多或更少的分区, 并在整个分区之间保持平衡。 |
repartitionAndSortWithinPartitions(partitioner) | 它根据给定的分区程序对RDD进行重新分区, 并在每个结果分区中按其键对记录进行排序。 |
行动
在Spark中, 操作的作用是在数据集上运行计算后将值返回给驱动程序。
让我们看看一些常用的RDD动作。
行动 | 描述 |
---|---|
reduce(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, 以消除副作用, 例如更新累加器或与外部存储系统进行交互。 |
评论前必须登录!
注册