当前位置:   article > 正文

Spark常用RDD操作_spark rdd的操作有几种

spark rdd的操作有几种

spark常用RDD操作,操作包括两种类型,即转换(Transformation)操作和行动(Action)操作

一、转换操作(Transformation)
1、filter(func)

筛选出满足函数func的元素,并返回一个新的数据集
例:

val lines=sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
val linesWithspark=lines.filter(line => line.contians("Spark"))  
  • 1
  • 2

该操作表示依次取出lines这个RDD中的每个元素,对于当前取到的元素,把它赋值给表达式中满足的line变量,执行函数lines.contains(“Spark”),如果lines中包含“spark”这个单词,就把这个元素加入到新的RDD变量(linesWithspark)中。

2、map(func)

将每个元素传递到函数func中,并将结果返回为一个新的数据集。
例:

val data=Array(1,2,3,4,5)
val rdd1= sc.parallelize(data)  //将data创建生成RDD
val rdd2=rdd1.map(x->+10)  
  • 1
  • 2
  • 3

该操作表示通过创建的Array数组生成的RDD(rdd1),执行rdd1.map(x->+10)表示依次取出这五个元素,对于取到的元素x+10,返回新的值作为一个元素放入到新的额RDD(rdd2),·最终生成的RDD包含五个元素,即(11,12,13,14,15)

3、fiatMap(func)

与map()相似,但每个输入元素都可以映射到0到多个输出结果。
例如:

 val lines = sc.textfile("file:///usr/local/spark/mycode/rdd/word.txt") //word.txt中元素均为String类型,即每个RDD元素就是一行文本
 val words= lines.flatMap(line=>line.split(" "))
  • 1
  • 2

该操作表示使用生成的RDD(lines),执行lines.flatMap(lines=>line.split(" "),等价于两个操作结果,先将lines中元素按照空格分成多个元素生成多个RDD,如 "I like spark"执行生成“I”、“like”、“spark”,三个RDD元素,将lines中RDD全部转换完成之后,再将每个RDD加入到同一块区中,比如lines中有三个RDD(“I love hadoop”,“I love spark ”,“spark is good ”),转换后每个RDD中又有三个RDD,最后将所有RDD整合在一起,得到
(“I”, “I”, “spark”,
“love”, “love”, “is”,
“hadoop”,“spark”,“good”)

4、groupByKey()

在一个(K,V)对组成的数据集上调用,返回一个(K,Iterable)形式的数据集。
将所有形同的key,归并为一个新的键值对。
例:

sc.parallelize(Seq(("a", 1), ("a", 1), ("b", 1)))
  .groupByKey()
  .collect()
  • 1
  • 2
  • 3

在这里插入图片描述
5、reduceByKey(func)

reduceByKey(func)应用于(K,V)键值对的数据集时,返回一个新的(K,V)形成的数据集,其中的每个值是将每个key传递到函数func中进行聚合后得到的结果,总的来说就是计算每个key的个数。
例:

sc.parallelize(Seq(("a", 1), ("a", 1), ("b", 1)))
  .reduceByKey( (curr, agg) => curr + agg )
  .collect()
  • 1
  • 2
  • 3

在这里插入图片描述
二、行动操作(action)

1、count()

返回数据集中的元素个数。

2、collect()

以数组形式返回数据集中的所有元素

3、first()

返回数据集中的第一个元素

4、take(n)

以数组的形式返回数据集中的前n个元素

5、reduce(func)

通过函数func(输入两个参数并返回一个值)聚合数据集中的元素

val rdd = sc.parallelize(Seq(("手机", 10.0), ("手机", 15.0), ("电脑", 20.0)))
val result = rdd.reduce((curr, agg) => ("总价", curr._2 + agg._2))
println(result)
  • 1
  • 2
  • 3

结果计算出总价45.0。

6、foreach(func)

将数据集中的每个元素传递到函数func中进行,遍历每一个元素,可后加println()输出元素

7、countByKey()

求得整个数据集中 Key 以及对应 Key 出现的次数

val rdd = sc.parallelize(Seq(("手机", 10.0), ("手机", 15.0), ("电脑", 20.0)))
val result = rdd.countByKey()
println(result)
  • 1
  • 2
  • 3

求得整个数据集中 Key 以及对应 Key 出现的次数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/736478
推荐阅读
相关标签
  

闽ICP备14008679号