006 Spark中的wordcount以及TopK的程序编写
1.启动
启动HDFS
启动spark的local模式./spark-shell
2.知识点
textFile:
def textFile(
path: String,
minPartitions: Int = defaultMinPartitions): RDD[String]
Filter:
Return a new RDD containing only the elements that satisfy a predicate.
def filter(f: T => Boolean): RDD[T],返回里面判断是true的RDD。
map:
Return a new RDD by applying a function to all elements of this RDD.
def map[U: ClassTag](f: T => U): RDD[U],从T到U类型的一个数据转换函数,最终返回的RDD中的数据类型是f函数返回的数据类型
flatMap:
Return a new RDD by first applying a function to all elements of this
RDD, and then flattening the results.
def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U]
从T到集合类型的数据类型转换,集合中的数据类型是U,最终返回的RDD数据类型是f函数返回的集合中的具体的类型数据。 3.编写基础的wordcount程序
//读取文件
val rdd=sc.textFile("wc/input/wc.input")
//过滤数据
val filterRdd=rdd.filter(len=>len.length>0)
//数据转换
val flatMapRdd=filterRdd.flatMap(line=>line.split(" ")
.map(word=>(word,1)))
//分组
val groupByRdd=flatMapRdd.groupBy(tuple=>tuple._1)
//聚合
val wordCount=groupByRdd.map(tuple=>{
val word=tuple._1
val sum=tuple._2.toList.foldLeft(0)((a,b)=>a+b._2)
(word,sum)
})
//输出
wordCount.foreach(println) //控制台上的输出
wordCount.saveAsTextFile("wc/output6") //HDFS上的输出
4.简化代码(链式编程)
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>0).
//数据转换
flatMap(_.split(" ").map((_,1))).
//分组
groupByKey().
//统计
map(tuple=>(tuple._1,tuple._2.toList.sum)).
//输出
saveAsTextFile("wc/output7")
5.最优化程序
reduceByKey存在combiner。
groupBy在大数据量的情况下,会出现OOM
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>0).
//数据转换
flatMap(_.split(" ").map((_,1))).
//统计
reduceByKey(_+_).
//输出
saveAsTextFile("wc/output8")
6.显示结果
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>).
//数据转换
flatMap(_.split(" ").map((_,))).
//统计
reduceByKey(_+_).
collect()
7.排序(第二个数,从大到小)
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>).
//数据转换
flatMap(_.split(" ").map((_,))).
//统计
reduceByKey(_+_).
//排序
sortBy(tuple=>tuple._2,ascending=false).
collect()
8.TopK(方式一)
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>).
//数据转换
flatMap(_.split(" ").map((_,))).
//统计
reduceByKey(_+_).
//排序
sortBy(tuple=>tuple._2,ascending=false).
take()
9.TopK(方式二,自定义)
sc.textFile("wc/input/wc.input").
//数据过滤
filter(_.length>).
//数据转换
flatMap(_.split(" ").map((_,))).
//统计
reduceByKey(_+_).
//排序
sortBy(tuple=>tuple._2,ascending=false).
top()(new scala.math.Ordering[(String,Int)](){
override def compare(x:(String,Int),y:(String,Int))={
val tmp=x._2.compare(y._2)
if(tmp!=) tmp
else x._1.compare(x._1)
}
})
006 Spark中的wordcount以及TopK的程序编写的更多相关文章
- Spark中的Wordcount
目录 通过scala语言基于local编写spark的Wordcount 基于yarn去调度WordCount 通过scala语言基于local编写spark的Wordcount import org ...
- Spark中的wordCount程序实现
import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.s ...
- spark 中的RDD编程 -以下基于Java api
1.RDD介绍: RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...
- 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程
本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...
- Spark初步 从wordcount开始
Spark初步-从wordcount开始 spark中自带的example,有一个wordcount例子,我们逐步分析wordcount代码,开始我们的spark之旅. 准备工作 把README.md ...
- 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle
一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...
- 020 Spark中分组后的TopN,以及Spark的优化(重点)
一:准备 1.源数据 2.上传数据 二:TopN程序编码 1.程序 package com.ibeifeng.bigdata.spark.core import java.util.concurren ...
- intellij-idea打包Scala代码在spark中运行
.创建好Maven项目之后(记得添加Scala框架到该项目),修改pom.xml文件,添加如下内容: <properties> <spark.version></spar ...
- spark中的RDD以及DAG
今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...
随机推荐
- ADB not responding
1.如下错误: 2.执行 如下代码 : netstat -aon|findstr "5037" 3.打开任务管理器 找到PID 为 5536 的进程 将该进程关闭 4.重启 A ...
- UBUNTU18.4环境下使用更好用的搜索引擎(无奈,只能起这样的标题)
初步安装 更新软件源 sudo apt-get update 安装pip (一个安装和管理 Python 包的工具) sudo apt-get install python-pip sudo apt- ...
- [BJWC2011]最小三角形(分治+最近点对)
题面:BJWC2011 最小三角形 \(solution:\) 昨天才学完平面最近点对,今天就要求平面最近的三个点,显然不是巧合. 仔细一思考,我们用来求平面最近点对的方法不就可以用到三个点上吗? 就 ...
- JavaScript学习 - 基础(三) - 运算符
js运算符 1.算数运算符 包括 加(+) .减-() .乘(*).除(/).余数(%) 减号 还可以表示为 负号 例如: -1,-3 加号 还可以用于字符串拼接 例如: 'a' + 'b' = 'a ...
- Qt 窗体使用 label 标签插入静态图片
最近在做毕业设计,上位机软件用的Qt,界面当中需要加入学校校徽,结果百度了n多种方法,有用QPixmap的: QPixmap myPix("./school.jpg"); ui-& ...
- 同步sync 异步async
线程中 同步任务是串行队列,也就是按顺序执行. 同步任务:不会开辟新的线程,它是在当前线程执行的. dispatch 调度 GCD里面的函数都是以dispatch开头的. 同步任务 步骤: 1. ...
- kali linux 下搭建git服务器
参考:http://www.cnblogs.com/dee0912/p/5815267.html https://www.liaoxuefeng.com/wiki/001373951630592960 ...
- 蒙特卡罗定位(Particle Filter Localization)笔记
善始善终,这篇文章是Coursera课程Robotics: Estimation and Learning最后一周的课程总结.里面的小哥讲得不是很清晰,留下的作业很花功夫(第二周课程也是酱紫). 这周 ...
- ubuntu 14.04 软件中心闪退解决方案
法一: gksudo gedit /usr/share/software-center/softwarecenter/ui/gtk3/views/lobbyview.py 注释下面这句话(注释使用#号 ...
- ubuntu14.04 boost 1.58.0 安裝
1.首先下载安装包,然后解压, 切换目录 wget -o boost_1_58_0.gar.gz http://sourceforge.net/projects/boost/files/boost/1 ...