package cn.itcast.spark.czh

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

object TestFun {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("map")
val sc = new SparkContext(conf)
// val rdd = sc.parallelize(1 to 10) //创建RDD
// val map = rdd.map(_*2) //对RDD中的每个元素都乘于2
// map.foreach(x => print(x+" "))
// sc.stop()
// fun1()
// val l = List(("kpop", "female"), ("zorro", "male"), ("mobin", "male"), ("lucy", "female"))
// val rdd = sc.parallelize(l, 2)
// /*写法一*/
// // val mp = rdd.mapPartitions(fun2)
// /*val mp = rdd.mapPartitionsWithIndex(partitionsFun)*/
// // mp.collect.foreach(x => (print(x + " "))) //将分区中的元素转换成Aarray再输出
// /*写法二*/
// // rdd.mapPartitions(x=>x.filter(_._2=="female")).map(_._1).foreach(x=>print(x+" "))
// /*写法三*/
// val mp = rdd.mapPartitionsWithIndex(fun3)
// mp.collect().foreach(x => (print(x + " ")))
// fun4(sc)
fun9(sc)
} /*map 数据集中的每个元素经过用户自定义的函数转换成一个新的RDD,新的RDD交MappedRDD*/
def fun0(): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("map")
val sc = new SparkContext(conf)
val rdd = sc.parallelize(1 to 10) //创建RDD
val map = rdd.map(_ * 2) //对RDD中的每个元素都乘于2
map.foreach(x => print(x + " "))
sc.stop()
} /*flatMap 与map类似,但每个元素输入项都可以被映射到0或者多个输出项,最终将结果扁平化输出*/
def fun1(): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("flatMap")
val sc = new SparkContext(conf)
val rdd = sc.parallelize(1 to 10)
val array = rdd.flatMap(x => (1 to x)).collect()
array.foreach(a => print(a))
} /*mapPartitions 类似于map,map作用于每个分区的每个元素,单mapPartitions作用于每个分区工*/
def fun2(iterable: Iterator[(String, String)]): Iterator[String] = {
var woman = List[String]()
while (iterable.hasNext) {
val next = iterable.next()
next match {
case (_, "female") => woman = next._1 :: woman
case _ =>
}
}
return woman.iterator
} /*mapPartitionsWithIndex*/
def fun3(index: Int, iterator: Iterator[(String, String)]): Iterator[String] = {
var woman = List[String]()
while (iterator.hasNext) {
val next = iterator.next()
next match {
case (_, "female") => woman = "[" + index + "]" + next._1 :: woman
case _ =>
}
}
return woman.iterator
} /* sample 对RDD进行抽样
* 参数解释:withReplacement 为true表示抽样之后还放回RDD,可以被多次抽样,false表示不放回。
* fraction 表示抽样比例
* seed为随机数种子,比如时间戳
* */
def fun4(sc: SparkContext): Unit = {
val rdd = sc.parallelize(1 to 10)
val sample1 = rdd.sample(true, 0.5)
sample1.collect().foreach(x => print(x + " "))
sc.stop()
} /*union 将两个RDD中的数据进行合并,并最终返回两个RDD的并集,若RDD中存在相同的元素也不会去重*/
def fun5(sc: SparkContext): Unit = {
var rdd1 = sc.parallelize(1 to 10)
var rdd2 = sc.parallelize(6 to 15)
rdd1.union(rdd2).collect().foreach(x => print(x + " "))
} /*intersection 返回两个RDD的交集*/
def fun6(sc: SparkContext): Unit = {
val rdd1 = sc.parallelize(1 to 10)
val rdd2 = sc.parallelize(5 to 20)
rdd1.intersection(rdd2).collect().foreach(x => print(x + " "))
} /*distinct 对RDD中的元素进行去重*/
def fun7(sc: SparkContext): Unit = {
val rdd1 = sc.parallelize(List(1, 1, 2, 3, 4, 5, 5))
rdd1.distinct().collect().foreach(x => print(x + " "))
} /*cartesian 对两个RDD中所有的元素进行笛卡尔积操作*/
def fun8(sc : SparkContext): Unit ={
val rdd1 = sc.parallelize(1 to 3)
val rdd2 = sc.parallelize(1 to 4)
rdd1.cartesian(rdd2).collect().foreach(x=>print(x+" "))
} /*coalesce(numPartitions,shuffle) 对RDD的分区进行重新分区,shuffle默认值为false,当shuffle=false时,不能增加分区数目,但不会报错,只是分区个数还是原来的*/
def fun9(sc :SparkContext): Unit ={
/*shuffle 为 false*/
val rdd1 = sc.parallelize(1 to 16,4)
val rdd2 = rdd1.coalesce(3)
print(rdd2.partitions.size) } }

Spark基本函数学习的更多相关文章

  1. Spark 基本函数学习笔记一

      Spark 基本函数学习笔记一¶ spark的函数主要分两类,Transformations和Actions. Transformations为一些数据转换类函数,actions为一些行动类函数: ...

  2. Spark菜鸟学习营Day6 分布式代码运行调试

    Spark菜鸟学习营Day6 分布式代码运行调试 作为代码调试,一般会分成两个部分 语法调试,也就是确定能够运行 结果调试,也就是确定程序逻辑的正确 其实这个都离不开运行,所以我们说一下如何让开发的S ...

  3. Spark菜鸟学习营Day5 分布式程序开发

    Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...

  4. Spark菜鸟学习营Day4 单元测试程序的编写

    Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...

  5. Spark菜鸟学习营Day3 RDD编程进阶

    Spark菜鸟学习营Day3 RDD编程进阶 RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lambda表示式来替换对象写 ...

  6. Spark菜鸟学习营Day2 分布式系统需求分析

    Spark菜鸟学习营Day2 分布式系统需求分析 本分析主要针对从原有代码向Spark的迁移.要注意的是Spark和传统开发有着截然不同的思考思路,所以我们需要首先对原有代码进行需求分析,形成改造思路 ...

  7. Spark菜鸟学习营Day1 从Java到RDD编程

    Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...

  8. 【Spark深入学习-11】Spark基本概念和运行模式

    ----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 ...

  9. 【Spark 深入学习 01】 Spark是什么鬼?

    经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将 ...

随机推荐

  1. [小米OJ] 6. 交叉队列

    思路: 大概思想如下: 1. 动态规划求解,构造dp[][] 二维数组: 2. 设dp[i][j], i 为 第一个字符串的第i个字母:j 为 第二个字符串的第j个字母  3. dp[i][j] 如果 ...

  2. Java集合Collention

    集合:又被称为容器,用来存储数据,他是一个对象,能够将具有相同性质的多个元素汇聚成一个整体,集合被用于存储,获取,操纵和传输聚合的数据. 这种数据结构称为集合 Collenction:他是集合的根接口 ...

  3. burpsuit用法

    1. 学习Proxy首先看标红,intercept is on 为拦截状态  其对应的intercept is off 为非拦截状态,设置完代理后打开拦截状态 ,浏览器发起的请求会被burpsuite ...

  4. [机器学习] SVM——Hinge与Kernel

    Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...

  5. 滚动视图、列表视图[ListView、SimpleAdapter类]

    滚动视图 <ScrollView android: layout_width="fill_parent" android: layout_height="fill_ ...

  6. Android的简述4

    NoteEditor深入分析 首先来弄清楚“日志编辑“的状态转换,通过上篇文章的方法来做下面这样一个实验,首先进入“日志编辑“时会触发onCreate和onResume,然后用户通过Option Me ...

  7. Split函数的使用

    Split函数,用来返回一个下标从零开始的一维数组,如下举例说明 1.split(' '),''号中间是空格 def break_words(stuff):    """ ...

  8. Windows上切换java8和java11

    Windows上安装了java8和java11,时不时要切换,于是思考写行命令解决.思路是修改java_home变量.我的java_home变量是设置在系统级别的. 修改环境变量有2个命令,set和s ...

  9. Extjs的textfield的颜色设置和出现的问题笔记

    Ext.getCmp('alarmsLevelVal').setFieldStyle('background-color:#ff0000;background-p_w_picpath: none; ' ...

  10. 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果

    上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...