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. [leetcode] 51. N-Queens (递归)

    递归,经典的八皇后问题. 利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数. 对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行. 遍历过程中,若 ...

  2. .net持续集成sonarqube篇之sonarqube基本操作(一)

    系列目录 Sonarqube Web管理界面虽然设计的简洁大方,也非常直观,但是由于功能繁多,这对快速入手以及快速定位到想要的功能都是一个挑战,在以后的几个小节里我们简要介绍. OwerView(概览 ...

  3. [mysql终极优化]之主从复制与读写分离详细设置教程

    读写分离与主从复制是提升mysql性能的重要及必要手段,大中型管理系统或网站必用之. 一.什么是读写分离与主从复制 先看图 如上图所示,当web server1/2/3要写入数据时,则向mysql d ...

  4. asn1 学习笔记

    语法 定义 Name ::= type 定义一个名称为“Name”的元素 它是一个给定ASN.1类型“Type”的实例 MyName ::= IA5String //IA5String(类似于ASCI ...

  5. android 界面提示框架WisdomProgressHUD,为金典而生

    一:简述 今天给android开发者们,推荐一个金典的界面提示框架WisdomProgressHUD,使用简洁方便. WisdomProgressHUD 是一个半透明的 HUD 指示器. Wisdom ...

  6. Python-默背单词

    ​ 数据库单词: 默认单词 单词说明 innodb 事务,主键,外键,tree,表行锁 myisam 主要以插入读取和插入操作 memory 所有数据保存在内存中 ACID 原子性,一致性,隔离性,持 ...

  7. 在.NET CORE中使用配置文件:对 ConfigurationBuilder 的使用说明

    示例:ASP.NET MVC 使用示例: 如何覆写默认行为?如取消热更新支持,方法如下: 示例:控制台 使用应用程序参数 使用键值对枚举(这里以字典来说明) 使用JSON文件 注册配置文件中的某一个段 ...

  8. JS节流和防抖函数

    一. 实现一个节流函数 // 思路:在规定时间内只触发一次function throttle (fn, delay) {  // 利用闭包保存时间  let prev = Date.now()  re ...

  9. oracle-11g2下载安装笔记

    一.下载链接地址 http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip http://dow ...

  10. Hadoop学习(7)-hive的安装和命令行使用和java操作

    Hive的用处,就是把hdfs里的文件建立映射转化成数据库的表 但hive里的sql语句都是转化成了mapruduce来对hdfs里的数据进行处理 ,并不是真正的在数据库里进行了操作. 而那些表的定义 ...