栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据开发:Spark算子

数据开发:Spark算子

Action (行动)算子 foreach

foreach 对RDD中的每个元素都应用传入的函数进行操作,
不返回RDD和Array,而是返回Unit

val source:RDD[String] = sc.textFile(".\datas")
val result_string:RDD[String] = source.map(x=>(x))
// 打印RDD中每个元素
result_string.foreach(println)
count

count 返回整个RDD的元素个数

val con: Long = sc.textFile(".\datas").flatMap(line => (line.split(" "))).count()
collect

collect 相当于toArray(toArray已经过时不推荐使用),
collect将分布式的RDD返回为一个单机的Scala Array数组,在这个数组上运用Scala的函数式操作。

   val col: Array[String] = sc.textFile(".\datas")
     .flatMap(line => line.split(" ")).collect()

   for (i <- col) {
     println(i)
   }
top

top从按降序排列的RDD中获取前几个元素,
比如top(5)表示获取前5个元素。

    val col: Array[String] = sc.textFile(".\datas\1.txt")
      .flatMap(line => line.split(" ")).top(3)
    for (i <- col) {
      println(i)
    }
reduce

reduce 将RDD中的元素两两传递给输入函数,同时产生一个新的值,
新产生的值与RDD中下一个元素再被传递给输入函数,直到最后只有一个值为止。

个人理解:
将第一个命名为x,将第二个命名为y,第三个命名为z,
假设传递的函数为 x+y,
计算过程为 x+y=c,c+z=【reduce的返回值】

    val col: String = sc.textFile(".\datas\1.txt")
      .flatMap(line => line.split(" ")).reduce((x, y) => x + y)
    println(col)
saveAsTextFile

saveAsTextFile 将数据输出存储到HDFS的指定目录

  sc.textFile(".\datas\1.txt").saveAsTextFile(".\datas\2.txt")
Transformation(变换/转换)算子 map

返回一个新的 RDD,该 RDD 由每一个输入元素经过 func 函数转换后组成

val source:RDD[String] = sc.textFile(".\datas")
val result_string:RDD[String] = source.map(x=>(x))
result_string.foreach(println)
val result_map:RDD[(String, Int)] = source.map(x=>(x, 1))
result_string.foreach(println)
sc.stop()
flatMap

类似于 map ,但是每个输入元素可以被映射为 0 或多个输出元素(返回一个序列)

个人理解:执行map之后,将每一个item 再map一次,将结果输出为一列

val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
arr.flatmap(x=>(x._1+x._2)).foreach(println)
distinct

distinct将RDD中的元素进行去重操作

    sc
      // 读取classpath 下 datas\1.txt
      .textFile(".\datas\1.txt")
      // 将每一个元素 按 " " 空格拆分并且压缩成一列
      .flatMap(line => line.split(" "))
      // 去重
      .distinct().foreach(println)
filter

filter 的功能是对元素进行过滤,对每一个元素应用传入的函数,
返回值为true的元素在RDD中保留;
返回值为false的将过滤掉。

    sc
      // 读取classpath 下 datas\1.txt
      .textFile(".\datas\1.txt")
      // 将每一个元素 按 " " 空格拆分并且压缩成一列
      .flatMap(line => line.split(" "))
      // 去重
      .distinct()
      // 过滤 留下包含"Hello"的元素
      .filter(line => line.contains("Hello"))
      .foreach(println)
reduceByKey

reduceByKey就是对元素为 (K,V)的RDD中Key相同元素的Value进行聚合,
因此Key相同的多个元素的值被聚合为一个值,然后与原RDD中的Key组成一个新的(K,V)。

    sc
      // 读取classpath 下 datas\1.txt
      .textFile(".\datas\1.txt")
      // 将每一个元素 按 " " 空格拆分并且压缩成一列
      .flatMap(line => line.split(" "))
      // 每个元素换为(Hello,1),……(Spark,1)
      .map(line=> (line, 1))
      // reduceByKey会寻找相同key的数据,当找到这样的两条记录时会对其value(分别记为x,y)
      // 做(x,y) => x+y的处理,即只保留求和之后的数据作为value。
      // 反复执行这个操作直至每个key只留下一条记录。
      .reduceByKey((k,v) => k+ v)
      .foreach(println)
union

union 可以对两个RDD进行合并,
但并不对两个RDD中的数据进行去重操作,它会保存所有数据;
另外union做合并时要求两个RDD的数据类型必须相同。

// 合并后打印
helloLines.union(checkLines).foreach(println)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号