DT_大数据梦工厂 第17课 RDD实战
来源:互联网 发布:js json根据key取值 编辑:程序博客网 时间:2024/06/04 17:40
今晚上课内容:
1 map、filter、flatmap操作回顾
2 reduceByKey、groupByKey
3 join、cogroup
join和cogroup是所有Spark学习者必须掌握的内容。
大数据中最重要的算子操作是:join!!!!!
以下是今天的项目实例及作业(用Scala写cogroup写一个实例)
package com.dt.spark.cores
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by chenjh on 2016/1/22.
*/
object Tranformations {
//main方法中调用的每一个功能,必须是每个模块可以使用函数封装
def main(args: Array[String]) {
val sc = sparkContext("Transformation Operations")
//mapTranformation(sc)
//filterTransformation(sc)
//flatMapTransformation(sc)
//groupByKeyTransformation(sc)
//reduceByKeyTransformation(sc)
//joinTransformation(sc)
//作业
cogroupTransformation(sc)
//停止SparkContext, 销毁相关的Driver对象,释放资源
sc.stop()
}def sparkContext(name: String) = {
//创建SparkConf,初始化程序的配置
val conf = new SparkConf().setAppName("Transformations").setMaster("local")
//创建SparkContext,这是第一个RDD创建的唯一入口,也是Driver的灵魂,是通往集群的唯一通道
val sc = new SparkContext(conf)
sc
}
def mapTranformation(sc:SparkContext){
val nums = sc.parallelize(1 to 10)
//循环遍历每个元素
//map适合于任何类型的元素,且对其作用的集合中的每一个元素循环遍历,并调用其作为参数的函数对每一个遍历的元素进行具体化处理:
val mapped = nums.map(item => 2 * item)
//收集计算结果并通过foreach循环打印
mapped.collect().foreach(println)
}
def filterTransformation(sc: SparkContext): Unit = {
//根据集合创建RDD
val nums = sc.parallelize(1 to 20)
//filter 中作为参数的函数的Boolean来判断符合条件的元素,并基于这些元素构建新的MapPartitionRDD
val filtered = nums.filter(item => item % 2 ==0)
filtered.collect().foreach(println)// 收集计算结果并通过 foreach循环打印
}
def flatMapTransformation(sc: SparkContext) {
//实例化字符串类型的Array
val bigData = Array("Scala Spark", "Java Hadoop", "Java Tachyon")
//创建以字符串元素类型的parallelCollectionRDD
val bigDataString = sc.parallelize(bigData)
//首先是通过传入的作为参数的函数来作用于RDD的每个字符串进行单词切分,是以集合的方式存在{Scala Spark Java Hadoop Java Tachyon}
val words = bigDataString.flatMap(line => line.split(" "))
words.collect().foreach(println)
}
def groupByKeyTransformation(sc: SparkContext) {
//准备数据
val data = Array(
Tuple2(100,"Spark"),
Tuple2(100,"Tachyon"),
Tuple2(70,"Hadoop"),
Tuple2(80,"Kafka"),
Tuple2(70,"HBase"))
//创建RDD
val dataRdd = sc.parallelize(data)
//按照相同的key对Value进行分组,分组后的Value是一个集合
val grouped = dataRdd.groupByKey()
//收集计算结果并通过foreach循环打印
grouped.collect().foreach(println)
}
def reduceByKeyTransformation(sc : SparkContext){
//val sc = new SparkContext(conf)
val lines = sc.textFile("C://SharedFolder//TextLines.txt",1)//并行度是1
val words = lines.flatMap{line => line.split(" ")}
val pairs = words.map {word =>(word,1)}
val wordCounts = pairs.reduceByKey(_+_)
wordCounts.collect.foreach(wordNumberPair => println(wordNumberPair._1 + " : " + wordNumberPair._2))
}
def joinTransformation(sc : SparkContext) {
val studentNames= Array(
Tuple2(1,"Spark"),
Tuple2(2,"Tachyon"),
Tuple2(3,"Hadoop")
)
val studentScores= Array(
Tuple2(1,100),
Tuple2(2,95),
Tuple2(3,70)
)
val names =sc.parallelize(studentNames)
val scores = sc.parallelize(studentScores)
val studentNameAndScore = names.join(scores)
studentNameAndScore.collect.foreach(println)
}
def cogroupTransformation(sc: SparkContext): Unit = {
val studentNames= Array(
Tuple2(1,"Spark"),
Tuple2(2,"Tachyon"),
Tuple2(3,"Hadoop")
)
val studentScores= Array(
Tuple2(1,100),
Tuple2(2,95),
Tuple2(3,70),
Tuple2(1,80),
Tuple2(3,89)
)
val names =sc.parallelize(studentNames)
val scores = sc.parallelize(studentScores)
val studentNameAndScore = names.cogroup(scores)
//打印输出
studentNameAndScore.collect.foreach(println)
}
}
打印结果:
(1,(CompactBuffer(Spark),CompactBuffer(100, 80)))
(3,(CompactBuffer(Hadoop),CompactBuffer(70, 61, 89)))
(2,(CompactBuffer(Tachyon),CompactBuffer(95)))
附上王老师个人名片信息
王家林 中国Spark第一人
新浪微博: http://weibo.com.ilovepains/
微信公共号:DT_Spark
博客:http://bolg.sina.com.cn/ilovepains
手机:18610086859
qq:1740415547
邮箱:18610086859@vip.126.com
0 0
- DT_大数据梦工厂 第17课 RDD实战
- DT_大数据梦工厂 第18课 RDD持久化、广播、累加器
- DT_大数据梦工厂 第8课 彻底实战详解使用IDE开发Spark程序
- 王家林亲授《DT大数据梦工厂》大数据实战视频 Scala 深入浅出实战经典 - 第71讲
- 大数据IMF传奇行动绝密课程第16课:RDD实战(RDD基本操作实战及Transformation流程图)
- DT大数据梦工厂免费实战大数据视频全集
- DT大数据梦工厂免费实战大数据视频全集!!
- DT大数据梦工厂免费实战大数据视频全集
- Dt大数据梦工厂王家林老师 Scala实战详解之第5讲 Scala数组操作实战详解
- Dt大数据梦工厂王家林老师 Scala实战详解之第6讲 Map、Tuple、Zip实战解析
- Dt大数据梦工厂王家林老师 Scala实战详解之第9讲 Scala的内部类实战详解
- Dt大数据梦工厂王家林老师 Scala实战详解之第11讲 Scala中的apply实战详解
- DT大数据梦工厂大数据第一天课程
- Dt大数据梦工厂王家林老师 Scala实战详解之第17讲 Scala中包、类、对象、成员、伴生类、伴生对象访问权限
- Dt大数据梦工厂王家林老师 Scala实战详解之第13讲 抽象类、抽象字段、抽象方法
- DT大数据梦工厂
- 大数据梦工厂
- 大数据梦工厂
- 添加UIview自定义的分割线、去掉默认的cell分割线、默认选中某一个(行)cell的方法
- 纯代码 vs XIB vs Storyboard
- Redhat5.8 环境下编译安装 Redis 并将其注册为系统服务
- x265-1.7版本-common/quant.cpp注释
- [微积分学习]Day.2 极限的概念
- DT_大数据梦工厂 第17课 RDD实战
- HBase vs. MongoDB vs. MySQL vs. Oracle vs. Redis,三大主流开源 NoSQL 数据库的 PK 两大主流传统 SQL 数据库
- Win10无线网络WiFi提示无法连接此网络的原因与解决方案
- 文件簇,文件扇区与flash中扇区及页的关系
- 类簇的设计
- 为什么使用命令行工具进行的提交没有在github主页上显示出来?
- 手把手带你画一个漂亮蜂窝view Android自定义view
- python核心编程-GUI程序之偏函数应用
- java 中println(this)的逻辑