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. JavaSE之概述

    作此篇是鉴于个人Java学习之需要,也便于日后进一步归纳与复习.  规定:      1 Java全面概述[囊括 Java工作原理,JVM方面知识,关键字(final,static,public,pr ...

  2. MySQL中查询行数最多的表并且排序

    #切换到schema use information_schema; #查询数据量最大的30张表 并排序 select table_name,table_rows from tables order ...

  3. cdh部署

    supermicro安装环境 本次安装基于无因特网的环境,共安装2个节点(一个master节点,一个data及节点),所用系统为centos7.x,所有安装过程均使用root用户.具体的节点信息如下: ...

  4. MR架构

    MapReduce框架结构 Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的MapReduce论文公开发布了.其中对它 ...

  5. RPC原理

    RPC同步调用流程:(异步另说) 1)服务消费方(Client)以本地的调用方式调用远程服务. 2)客户端代理(Client Stub)接收到调用后负责将方法.参数等组装成能够进行网络传输的消息体. ...

  6. C#基础系列-反射

    1.反射的定义 反射(Reflection),是.Net中获取运行时类型信息的方式.程序集中有关程序及其类型的数据被称为元数据(metadata).程序在运行时,可以查看其它程序集或其本身的元数据.一 ...

  7. pyspider使用

    #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2018-11-08 22:33:55 # Project: qsbk fro ...

  8. tomcat生产环境JDK部署及虚拟主机等常用配置详解

    jdk和tomcat环境部署: 1.删除系统自带的openjdk # java -version java version "1.7.0_45" OpenJDK Runtime E ...

  9. 利用navcat为mysql数据库单独的表赋权限及表结构同步

    为mysql数据库单独的表赋权限 场景:考勤系统需要拿OA数据库td_oa中的flow_run和flow_run_data表中的数据做考勤计算 考勤系统只需要读取这两张表的数据,所以只需要开通一个单独 ...

  10. Go语言规格说明书 之 通道 发送语句(send) 和 接收操作符(receive)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...