04常用RDD操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04常用RDD操作相关的知识,希望对你有一定的参考价值。

 

 

函数名

目的

示例

结果

RDD[U] map(f: T => U)

T:初始元素类型

U:转换后元素类型

将函数应用于 RDD 中的每个元素,将返回值构成新的 RDD

rdd.map(x => x + 1)

测试数据:{1, 2, 3, 3}

输出结果:{2, 3, 4, 4}

RDD[U] flatMap(f: T => TraversableOnce[U])

TraversableOnce:特质,具有集合与迭代器特性

将函数应用于 RDD 中的每个元素,将返回的迭代器的所有内容构成新的 RDD。通常用来切分单词

rdd.flatMap(x => x.to(3))

测试数据:{1, 2, 3, 3}

输出结果:{1, 2, 3, 2, 3, 3, 3}

RDD[T] filter(f: T => Boolean)

返回一个由通过传给 filter()的函数的元素组成的 RDD

rdd.filter(x => x != 1)

测试数据:{1, 2, 3, 3}

输出结果:{2, 3, 3}

RDD[T] distinct()

去重

rdd.distinct()

测试数据:{1, 2, 3, 3}

输出结果:{1, 2, 3}

RDD[(K, Iterable[V])] gropuByKey()

Kkey类型

Vvalue类型

根据key进行分组,返回的元素每个key对应一个Iterable<value>

 

测试数据:

("class1", 80),

("class2", 75),     

("class1", 90),

("class2", 60)

输出结果:

("class1",[80,90])

("class2",[75,60])

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

对每个key对应的value进行reduce操作

rdd. reduceByKey(_ + _)

测试数据:

("class1", 80),

("class2", 75),     

("class1", 90),

("class2", 60)

输出结果:

("class1", 170),

("class2", 135)

RDD[(K, V)] sortByKey()

根据key进行排序操作

 

测试数据:

(65, "leo")

(50, "tom")

(100, "marry")

(85, "jack")

输出结果:

(100, "marry")

(85, "jack")

(65, "eo")

(50, "tom")

RDD[T] sortBy(f: (T) => K,

      ascending: Boolean,

      numPartitions: Int)

 

既可以根据key也可以根据value进行排序,传入的是一个(T) => K 转换函数

rdd.sortBy(_._2, false, 1)

 

ascendingfalse时降序

测试数据:

("leo", 65),

("tom", 50),

("marry", 100),

("jack", 80)

输出结果:

("marry", 100),

("jack", 80)

("leo", 65),

("leo", 65),

join

对两个包含<key,value>对的RDD进行join操作,返回类型<key,Tuple2(key,value)>

 

 

cogroup

join,但是每个key对应的Iterable<value>都会传入自定义函数进行处理

 

 

对数据分别为{1, 2, 3}{3, 4, 5}RDD进行针对两个RDD的转化操作

union()

两个RDD联合

rdd.union(other)

{1, 2, 3, 3, 4, 5}

intersection()

两个RDD 交集

rdd.intersection(other)

{3}

subtract()

两个RDD相减

rdd.subtract(other)

{1, 2}

cartesian()

两个RDD相减笛卡儿积

rdd.cartesian(other)

{(1, 3), (1, 4), ...(3, 5)}

 

 

 

 

对一个数据为{1, 2, 3, 3}RDD进行基本的RDD行动操作

函数名

目的

示例

结果

collect()

返回 RDD 中的所有元素

rdd.collect()

{1, 2, 3, 3}

count()

RDD 中的元素个数

rdd.count()

4

 

countByValue()

各元素在 RDD 中出现的次数

rdd.countByValue()

{(1, 1),(2, 1),(3, 2)}

take(num)

RDD 中返回 num 个元素

rdd.take(2)

 

{1, 2}

top(num)

RDD 中返回最前面的 num个元素

 

rdd.top(2)

 

{3, 3}

takeOrdered(num)(ordering)

RDD 中按照提供的顺序返回最前面的 num 个元素

 

rdd.takeOrdered(2)(myOrdering)

{3, 3}

takeSample(withReplace

ment, num, [seed])

RDD 中返回任意一些元素

rdd.takeSample(false, 1)

非确定的

reduce(func)

RDD

(例如 sum

 

rdd.reduce((x, y) => x + y)

9

fold(zero)(func)

reduce() 样,

提供初始值

rdd.fold(0)((x, y) => x + y)

9

aggregate(zeroValue)

(seqOp, combOp)

 

reduce() 似,

返回不同类型的函数

 

rdd.aggregate((0, 0))

((x, y) =>

(x._1 + y, x._2 + 1),

(x, y) =>

(x._1 + y._1, x._2 + y._2))

 

(9,4)

 

foreach(func)

RDD 中的每个元素使用给

定的函数

rdd.foreach(func)

 

 

 

 

 

 

 

附件列表

     

    以上是关于04常用RDD操作的主要内容,如果未能解决你的问题,请参考以下文章

    04常用RDD操作

    04常用RDD操作

    Learning Spark——RDD常用操作

    08Spark常用RDD变换

    Spark RDD常用算子操作 键值对关联操作 subtractByKey, join,fullOuterJoin, rightOuterJoin, leftOuterJoin

    pyspark3.0.0+spark3.0.0学习01(RDD的创建,RDD算子(常用Transformation算子 常用Action算子 分区操作算子)的学习及应用)