spark 编程基础

本文介绍了在ApacheSpark中使用`parallelize()`,`makeRDD()`,`map()`,`sortBy()`,`collect()`,`filter()`,`distinct()`以及`intersection()`等函数对数据进行操作,包括创建RDD、分区、转换、排序和数据处理的基本示例。
摘要由CSDN通过智能技术生成

第三章

1,parallelize()

 创建RDD及查看分区个数

package test

import org.apache.spark.{SparkConf, SparkContext}

object d {
 
def main(args: Array[String]): Unit = {
   
val conf = new SparkConf().setAppName("worldcount").setMaster("local")
   
val sc = new SparkContext(conf)
   
val data = Array(1, 2, 3, 4, 5)
   
//val distData = sc.parallelize(data)显示默认分区个数
   
val distData = sc.parallelize(data, 4)//设置分区为4
   
print(distData.partitions.size)


  }
}

2,makeRDD()

创建RDD并查看分区值

//使用makeRDD()方法创建RDD并查看各分区的值
val seq=Seq((1,seq("iteblogs.com","sparkhost1.com")),
 
(3,Seq("iteblog.com","sparkhost2.com")),
 
(2,Seq("iteblog.com","sparkhost3.com")))
//使用makeRDD创建RDD
val iteblog=sc.makeRDD(seq)
//查看RDD的值
iteblog.collect.foreach(print)

3,map()方法转换数据

可以对RDD中的每一个数据元素通过某种函数进行转换并返回新的RDD

//创建RDD

val disData = sc.parallelize(List(1,3,45,3,76))

//map()方法求平均值

val sq_list=disData.map(x => x*x)

println(sq_list)

4,sortBy()方法进行排序

//创建RDD

val data = sc.parallelize(List((1,3),(45,3),(7,6)))

 //使用sortBy()方法对元祖的第二个值进行降序排序,分区个数设置为1

 val sort_data=data.sortBy(x => x._2,false,1)

 println(sort_data)

P58 获取上半年实际薪资排名前三的员工信息

package test

import org.apache.spark.{SparkConf, SparkContext}

object a {
 
def main(args: Array[String]): Unit = {
   
val conf = new SparkConf().setAppName("worldcount").setMaster("local")
   
val sc=new SparkContext(conf)
   
val first_half = sc.textFile("C:\\Users\\Administrator\\Desktop\\Employee_salary_first_half.csv")
   
val drop_first =first_half.mapPartitionsWithIndex((ix,it) => {
     
if (ix==0 ) it drop(1)
      it
    })
   
val split_first = drop_first.map(line => {val data = line.split(",");
   
(data(1),data(6).toInt)
    })
   
val sort_first= split_first.sortBy(x => x._2,false)
    sort_first.take(
3)
  }


}

4,collect()方法查询数据

filter()方法进行过滤

package test

import org.apache.spark.{SparkConf, SparkContext}

object b {
 
def main(args: Array[String]): Unit = {
   
val conf =new SparkConf().setMaster("local").setAppName("PartialFumction")
   
val sc=new SparkContext(conf)
   
val rdd1 = sc.parallelize(List(('a',1),('b',2),('c',3)))
    rdd1.filter(_._2>
1).collect.foreach(println)
    rdd1.filter(x => x._2 >
1).collect.foreach(println)

  }

}

Distinct()方法去重

package test

import org.apache.spark.{SparkConf, SparkContext}

object c {
 
def main(args: Array[String]): Unit = {
   
val conf =new SparkConf().setMaster("local").setAppName("PartialFumction")
   
val sc=new SparkContext(conf)
   
val rdd3=sc.makeRDD(List(1,100,200,300,100))
    rdd3.filter(x => x>
99).collect()
    rdd3.distinct().collect().foreach(println)

  }

}

Intersection方法

package test



import org.apache.spark.{SparkConf, SparkContext}



object e {

  def main(args: Array[String]): Unit = {

    val conf =new SparkConf().setMaster("local").setAppName("PartialFumction")

    val sc=new SparkContext(conf)

    val rdd1=sc.parallelize(List(('a',1),('a',1),('b',1),('c',1)))

    val rdd2=sc.parallelize(List(('a',1),('b',1),('d',1)))

    //intersection()求两个RDD的共同元素

    rdd1.intersection(rdd2).collect.foreach(print)

  }



}

package test



import org.apache.spark.{SparkConf, SparkContext}



object f {

  def main(args: Array[String]): Unit = {

    val conf =new SparkConf().setMaster("local").setAppName("PartialFumction")

    val sc=new SparkContext(conf)

    val rdd1=sc.parallelize(List(('a',1),('b',1),('c',1)))

    val rdd2=sc.parallelize(List(('d',1),('e',1),('c',1)))

    //subtract rdd1rdd2彼此的补集

    rdd1.subtract(rdd2).collect.foreach(print)

    rdd2.subtract(rdd1).collect.foreach(print)

    // cartersian() 可以将2个集合的元素两两合成1一组,即求笛卡尔积

    val rdd01=sc.makeRDD(List(1,3,5,3))

    val rdd02=sc.makeRDD(List(2,4,5,1))

    rdd01.cartesian(rdd02).collect.foreach(print)

    //

  }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值