Spark部分算子及使用

本文详细介绍了Spark中的部分核心算子,包括flatmap、map、filter、sample、reducebykey、union、join、交集、笛卡尔积、groupbykey、reducebykey、distinct等,并探讨了算子的使用场景和优化策略。通过实例解析,帮助理解各算子的工作原理及其在数据处理中的应用。
摘要由CSDN通过智能技术生成

Spark部分算子及使用

案例一:flatmap算子

def main(args: Array[String]): Unit = {
   
  val conf = new SparkConf().setAppName("test1").setMaster("local[1]")
  val sc = new SparkContext(conf)
  //UDAF 一对多 炸裂
  val list: List[String] = List("wuyanzu,pengyuyan,liushishi,zhangjunning")
  val listRDD: RDD[String] = sc.parallelize(list)
  //扁平化算子
  val flatMapRDD: RDD[String] = listRDD.flatMap(line => line.split(","))
  flatMapRDD.foreach(println)
}

案例二:map算子

def main(args: Array[String]): Unit = {
   
  val conf = new SparkConf().setAppName("test1").setMaster("local[1]")
  val sc = new SparkContext(conf)
//一对一 
  val list:Seq[Int] = 1 to 7
  val listRDD: RDD[Int] = sc.parallelize(list)
  //每个元素*7
  val mapRDD: RDD[Int] = listRDD.map(e => e * 7)
  mapRDD.foreach(println)

}

案例三:filter算子

对父RDD中每一个元素数据执行对应的function函数,如果函数返回true保留当前父RDD中的元素数据,如果为false,过滤掉当前数据

def main(args: Array[String]): Unit = {
   
  val conf = new SparkConf().setAppName("test1").setMaster("local[1]")
  val sc = new SparkContext(conf)

  var list:List[String] = List("1,jiajingwen,18,0","2,pengyuyan,20,1","3,gaoyuanyuan,28,0")
  val listRDD: RDD[String] = sc.parallelize(list)
  //选出女生
  val filterRDD = listRDD.filter(e => {
   
    val strList: Array[String] = e.split(",")
    strList(3).equals("0")
  })
  filterRDD.foreach(println)
}

案例四:sample算子(从父RDD抽取一定量的数据)

数据倾斜调研的时候会用到sample,比如有10TB的数据统计key的个数,会很耗时,可以用抽样,随机抽样用部分的数据代表整体
reducebykey【相同的key拉取到同一节点,不同的key可能拉取到不同节点】

sample(false, 0.2, 1)

1.withReplacement=true:有放回抽样(withReplacement=false无放回抽样)

2.fraction=0.2:不一定就抽取20%,会在20%这个值上下浮动

3.seed=1:随机种子(固定随机模式)

def main(args: Array[String]): Unit = {
   
  val conf = new SparkConf().setAppName("test1").setMaster("local[1]")
  val sc = new SparkContext(conf)

  val list:Seq[Int]= 1 to 10000
  val listRDD: RDD[Int] = sc.parallelize(list)
  val sampleRDD: RDD[Int] = listRDD.sample(false, 0.2, 1)
  sampleRDD.foreach(println
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值