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. java学习笔记5--类的方法

    接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...

  2. 【问题】VH

      [问题]: CSS中使用了VH,在iOS中展示正常,但是在安卓的个别浏览器中,当输入框弹出时,使用VH的DIV的高度会发生变化. [原因]: 在安卓端浏览器虚拟键盘弹出时,导致视口高度改变,以至于 ...

  3. C# 中如何将List<string>里的集合转换成字符串并按指定的字符进行分隔?

    代码: using System; using System.Collections.Generic; publicclassMyClass { publicstaticvoidMain() { Li ...

  4. 通过反射获取class文件中的构造方法,运行构造方法

    /* * 通过反射获取class文件中的构造方法,运行构造方法 * 运行构造方法,创建对象 * 1.获取class文件对象 * 2.从class文件对象中,获取需要的成员 * * Constructo ...

  5. ant design pro (五)新增业务组件

    一.概述 参看地址:https://pro.ant.design/docs/new-component-cn 对于一些可能被多处引用的功能模块,建议提炼成业务组件统一管理.这些组件一般有以下特征: 只 ...

  6. ES6 import 循环加载

    1.示例 (1)a.js import {bar} from './b'; console.log('a.mjs'); console.log(bar); export let foo = 'foo' ...

  7. leetCode(29):Happy Number

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  8. Python-字符编码详解

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  9. Linux的内存映像导出接口—kcore

    发表于 2012-4-10 15:00   /proc/kcore文件提供了整个机器的内存映像,和vmcore不同的是,它提供了一个运行时的内存映像,为此和vmcore一样,内核提供了一个类似的但是稍 ...

  10. Zmodem transfer canceled by remote side问题的解决办法!

    在使用跳转机跳转到另外一台机器的时候,上传一个安装包,此时使用rz命令上传文件,例如:resin-pro-4.0.44.tar.gz,结果出现如下错误提示: 点击确定之后,界面出现乱码,并退回到了跳转 ...