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的程序编写的更多相关文章

  1. Spark中的Wordcount

    目录 通过scala语言基于local编写spark的Wordcount 基于yarn去调度WordCount 通过scala语言基于local编写spark的Wordcount import org ...

  2. Spark中的wordCount程序实现

    import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.s ...

  3. spark 中的RDD编程 -以下基于Java api

    1.RDD介绍:     RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...

  4. 大话Spark(3)-一图深入理解WordCount程序在Spark中的执行过程

    本文以WordCount为例, 画图说明spark程序的执行过程 WordCount就是统计一段数据中每个单词出现的次数, 例如hello spark hello you 这段文本中hello出现2次 ...

  5. Spark初步 从wordcount开始

    Spark初步-从wordcount开始 spark中自带的example,有一个wordcount例子,我们逐步分析wordcount代码,开始我们的spark之旅. 准备工作 把README.md ...

  6. 【Spark篇】---Spark中Shuffle机制,SparkShuffle和SortShuffle

    一.前述 Spark中Shuffle的机制可以分为HashShuffle,SortShuffle. SparkShuffle概念 reduceByKey会将上一个RDD中的每一个key对应的所有val ...

  7. 020 Spark中分组后的TopN,以及Spark的优化(重点)

    一:准备 1.源数据 2.上传数据 二:TopN程序编码 1.程序 package com.ibeifeng.bigdata.spark.core import java.util.concurren ...

  8. intellij-idea打包Scala代码在spark中运行

    .创建好Maven项目之后(记得添加Scala框架到该项目),修改pom.xml文件,添加如下内容: <properties> <spark.version></spar ...

  9. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

随机推荐

  1. Navicat Premium连接各种数据库

    版本信息 Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL.MariaDB.SQL Server.Oracle.PostgreSQL 和 SQLite 数 ...

  2. Linux时间日期类指令

    ⒈date [Options] 显示/设置当前日期 基本语法: date 显示当前时间 date +"%Y" 显示当前年份 date +"%m" 显示当前月份 ...

  3. SpringBoot使用Redis缓存

    (1).添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  4. 五、regularized线性回归练习(转载)

    转载链接:http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964515.html 前言: 本节主要是练习regularization项的使 ...

  5. python动态函数名的研究

    所谓动态函数名,就是使用时完全不知道是叫什么名字,可以由用户输入那种. 一般人习惯性会想到eval或exec, 但是众所周知,这样的写法不安全而且容易引起问题,而且不pythonic.而且使用时必须把 ...

  6. SpringMVC_HelloWorld_02

    一.新建项目 同SpringMVC_HelloWorld_01 二.配置文件 1.配置web.xml <?xml version="1.0" encoding="U ...

  7. saltstack自动化运维系列⑤之saltstack的配置管理详解

    saltstack自动化运维系列⑤之saltstack的配置管理详解 配置管理初始化: a.服务端配置vim /etc/salt/master file_roots: base: - /srv/sal ...

  8. linux网络设备驱动

    Linux网络设备驱动 Linux网络驱动程序的体系结构可划分为4个层次.Linux内核源代码中提供了网络设备接口及以网络子系统的上层的代码,移植特定网络硬件的驱动程序的主要工作就是完成设备驱动功能层 ...

  9. 03-MySql安装和基本管理

    本节掌握内容: MySQL的介绍安装.启动 windows上制作服务 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 O ...

  10. java.lang.NoClassDefFoundError: com/google/inject/Injector

    报错如下: 解决方案: <dependency> <groupId>com.google.inject</groupId> <artifactId>gu ...