1.求每家公司有哪些产品

val arr3 = List("Apache" -> "Spark", "Apache" -> "Kafka", "Oracle" -> "JAVA", "Oracle" -> "DB ORACLE", "Oracle" -> "Mysql");
val rdd2 = sc.makeRDD(arr3).aggregateByKey(List[String]())((strings:List[String],str:String)=>str::strings,(strings:List[String],strings0:List[String])=>strings ::: strings0)
val rdd3 = sc.makeRDD(arr3).groupByKey()

2.验证par方法

( to ).par.collect{case _ => Thread.currentThread.getName}.distinct.foreach(println)
package spark01

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

import scala.collection.mutable
import scala.collection.mutable.ListBuffer /**
* yong rdd处理一个不规则的数组
*
* Created by lq on 2017/8/11.
*/
object MkRdd {
def test4(): Unit = {
val conf = new SparkConf().setAppName("WC").setMaster("local[2]")
val sc = new SparkContext(conf)
val arr = List(("Apache" -> "Spark"), ("Apache" -> "Kafka"), ("Oracle" -> "JAVA", "Oracle" -> "DB ORACLE", "Oracle" -> "Mysql"));
//flatmap是每次传入一个元素返回一个集合(可以是新建的)
val rdd = sc.makeRDD(arr).flatMap(t => {
t match {
case s:Tuple2[String, String] => List(s)
case _ => t.productIterator.toList
}
}).map(t=>{t.asInstanceOf[Tuple2[String,String]]}).groupByKey()
//.aggregate(ListBuffer[String]())((x:ListBuffer[String],y)=>{x.+(y.asInstanceOf[String]);x},(m,n)=>{m++n})
println(rdd.collect.toBuffer)
} /**
* aggregateByKey的例子
*/
def test5(): Unit ={
val conf = new SparkConf().setAppName("WC").setMaster("local[2]")
val sc = new SparkContext(conf) val arr2 = List(("Apache" -> "Spark"), ("Apache" -> "Kafka"), ("Oracle" -> "JAVA"), ("Oracle" -> "DB ORACLE"), ("Oracle" -> "Mysql"));
val arr3 = List("Apache" -> "Spark", "Apache" -> "Kafka", "Oracle" -> "JAVA", "Oracle" -> "DB ORACLE", "Oracle" -> "Mysql");
val rdd2 = sc.makeRDD(arr3).aggregateByKey(List[String]())((strings:List[String],str:String)=>str::strings,(strings:List[String],strings0:List[String])=>strings ::: strings0)
val rdd3 = sc.makeRDD(arr3).groupByKey()
println(rdd2.collect().toBuffer)
//println(rdd3.collect().toBuffer) } /**
* aggregate 的例子,求数组的平均数
*/
def test6(): Unit ={
val arr = List(,,,,,,,,)
val res = arr.aggregate(,)((acc,number)=>(acc._1+number,acc._2+),(par1,par2)=>(par1._1+par2._1,par1._2+par2._2))
//并行化
val res1 = arr.par.aggregate(,)((acc,number)=>(acc._1+number,acc._2+),(par1,par2)=>(par1._1+par2._1,par1._2+par2._2))
val res2 = res._1/res._2
println(res2)
}
// 求出每个同学的平均成绩(要求,不要直接/3)
def test77: Unit = {
val conf = new SparkConf().setAppName("WC").setMaster("local[2]")
val sc = new SparkContext(conf)
//数据格式
// Lily,math,98
//Lily,english,98
//aggregateByKey 与reduce的区别 aggregateBykey可以改变返回数据的类型而reduce不能
val rdd1 = sc.textFile("D:\\___WORK\\workSpaceHome\\temp\\study3\\mySpark\\score.dat")
.map(_.split(","))
.map(t=>{(t(0),(t(1),t(2).toInt))})//(Lily,(math,98))
.aggregateByKey((mutable.Set[String](),0))(
(m, n)=>{
(m._1 + n._1, m._2+n._2)
},//局部计算,m代表的是初始值,n代表的是迭代值
(x,y)=>{//x,y代表的是每个分区的值
((x._1 | y._1),(x._2+y._2))
}//整体计算
).map(t=>{(t._1,t._2._2/t._2._1.size)})//t._1是之前的key,t._2为aggregateByKey计算过之后的value 格式是(mutable.Set[String](),0)
//.groupByKey().map(t=>{(t._1._1,t._1._2/t._2.size)})
println(rdd1.collect().toBuffer)
}
object AggregateByKeyOp { def main(args:Array[String]){ val sparkConf: SparkConf = new SparkConf().setAppName("AggregateByKey").setMaster("local") val sc: SparkContext = new SparkContext(sparkConf) val data=List((,),(,),(,),(,)) val rdd=sc.parallelize(data, ) //合并不同partition中的值,a,b得数据类型为zeroValue的数据类型 def combOp(a:String,b:String):String={ println("combOp: "+a+"\t"+b) a+b } //合并在同一个partition中的值,a的数据类型为zeroValue的数据类型,b的数据类型为原value的数据类型 def seqOp(a:String,b:Int):String={ println("SeqOp:"+a+"\t"+b) a+b } rdd.foreach(println) //zeroValue:中立值,定义返回value的类型,并参与运算 //seqOp:用来在同一个partition中合并值 //combOp:用来在不同partiton中合并值 val aggregateByKeyRDD=rdd.aggregateByKey("")(seqOp, combOp) println(aggregateByKeyRDD.collect().toBuffer) //ArrayBuffer((2,1003), (1,100321004)) 由于并行之后得到两个分区,在对两个分区调用这个方法时,每个分区中中立值都会使用一次 //此时可以查看分区情况分析当前结果  sc.stop() } }

case 的另一种使用场景


//这种写法可以在使用偏函数时变量更清晰
def ip2Long(ipAddress: String): Long = {
ipAddress.split("\\.").zipWithIndex.foldLeft(0L) {
case (result, (ip, index)) ⇒ {
result + (ip.toLong << ((3-index) * 8))
}
}
}
//最初的写法
def ip2Long2(ipAddress: String): Long = {
ipAddress.split("\\.").zipWithIndex.foldLeft(0L)((result,t)=>{
result + (t._1.toLong << ((3-t._2) * 8))
})
}

scala,spark练习题提高的更多相关文章

  1. brdd 惰性执行 mapreduce 提取指定类型值 WebUi 作业信息 全局临时视图 pyspark scala spark 安装

    [rdd 惰性执行] 为了提高计算效率 spark 采用了哪些机制 1-rdd 基于分布式内存数据集进行运算 2-lazy evaluation  :惰性执行,即rdd的变换操作并不是在运行该代码时立 ...

  2. Eclipse+maven+scala+spark环境搭建

    准备条件 我用的Eclipse版本 Eclipse Java EE IDE for Web Developers. Version: Luna Release (4.4.0) 我用的是Eclipse ...

  3. 在IntelliJ IDEA中创建和运行java/scala/spark程序

    本文将分两部分来介绍如何在IntelliJ IDEA中运行Java/Scala/Spark程序: 基本概念介绍 在IntelliJ IDEA中创建和运行java/scala/spark程序 基本概念介 ...

  4. 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池

    第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...

  5. eclipse构建maven+scala+spark工程 转载

    转载地址:http://jingpin.jikexueyuan.com/article/47043.html 本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现sp ...

  6. Windows下Eclipse+Scala+Spark开发环境搭建

    1.安装JDK及配置java环境变量 本文使用版本为jdk1.7.0_79,过程略 2.安装scala 本文使用版本为2.11.8,过程略 3.安装spark 本文使用版本为spark-2.0.1-b ...

  7. Scala - Spark Lambda“goesto“ => 分析

    /// 定义一个函数AddNoise,参数分别为rdd,Fraction.其中rdd为(BreezeDenseMatrix, BreezeDenseMatrix)元组构成的RDD.Fraction为一 ...

  8. Eclipse + Idea + Maven + Scala + Spark +sbt

    http://jingpin.jikexueyuan.com/article/47043.html 新的scala 编译器idea使用 https://www.jetbrains.com/idea/h ...

  9. eclipse构建maven+scala+spark工程

    前提条件 下载安装Scala IDE build of Eclipse SDK 构建工程 1.新建maven工程 2.配置项目信息 3.新建scala对应的Source Folder 4.添加scal ...

随机推荐

  1. qt study 泛型和容器

    所谓泛型(generic) 能够像操作基本类型一样轻松操作对象的类和函数. qt容器类就是泛型类,基于模板的泛型类. 重载运算符overloaed operator, 托管容器 managed con ...

  2. http://blog.csdn.net/steveguoshao/article/details/38414145

    http://blog.csdn.net/steveguoshao/article/details/38414145

  3. [Algorithm -- Dynamic Programming] Recursive Staircase Problem

    For example there is a staricase N = 3 | ---|   |---|    | |---|            | ---|                  ...

  4. CSDN日报20170404 ——《不不过写代码,而是完毕作品》

    [程序人生]不不过写代码,而是完毕作品 作者:瞬息之间 近来有人问起,如今似乎真得变成了码农,日出而作,日落而息.整天不停的写代码,开发业务需求,周而复始,日子长了,感到厌倦. 有时回忆,应该在过去的 ...

  5. sql server 数据库备份历史记录

    sql server 数据库备份历史记录 SELECT ),SERVERPROPERTY('Servername'))AS Server, bs.database_name, bs.backup_st ...

  6. ubuntu系统——增加磁盘空间

    1.df查看磁盘使用情况 2.将windows下的磁盘空间分出与部分给ubuntu 3.格式化磁盘    在终端输入:mkfs -t ext3 /dev/sdb1    用ext3格式对/dev/sd ...

  7. 使用CXF实现基于Rest方式的WebService

    本文介绍使用CXF实现基于Rest方式的WebService(CXF的版本是3.0.0) 一. 前言 Java有三种WebService规范:Jax-WS,Jax-RS,Jaxm 1. Jax-WS( ...

  8. .net core json序列化首字符小写和日期格式处理

    打开Startup.cs文件,在ConfigureServices方法中添加如下代码 public void ConfigureServices(IServiceCollection services ...

  9. Linux命令-帮助命令:whatis,apropos

    whatis可以查看命令简化版的帮助内容 whatis ls 查看简化版的ls命令的帮助内容 whatis ifconfig 查看简化版的ifconfig命令的帮助内容 apropos可以查看配置文件 ...

  10. 用ping让对方电脑堵塞瘫痪

    用ping让对方电脑堵塞瘫痪2008-04-27 11:32 定义echo数据包大小. 在默认的情况下windows的ping发送的数据包大小为32byt,我们也可以自己定义它的大小, 但有一个大小的 ...