用Scala实现

RDD(可以简单理解为是一个list集合,里面放的就是读到的一行一行的数据)是spark中非常核心的内容,只有通过SparkContext才能创建出来RDD。

package com.husky.sparkimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object SparkWordCount {def main(args: Array[String]): Unit = {//conf可以设置SparkApplication运行的资源、名称、还有Spark运行模式val conf = new SparkConf()conf.setAppName("wordcount")conf.setMaster("local")//本地运行//通往集群的唯一通道val sc = new SparkContext(conf)//去指定目录读文件,类型是RDD。RDD可以简单理解为是一个List集合,里面放的就是//读到的一行一行的数据:hello world ni hao//这里需要注意的是:inpath只会默认找到project一层,不会找到moduleval lines: RDD[String] = sc.textFile("data/word")//把一行数据切开,flatMap的特点就是一对多,用“ ”切割成单词val words: RDD[String] = lines.flatMap(lines => {lines.split(" ")})//借助二元组计数val pairword: RDD[(String, Int)] = words.map(word=>{new Tuple2(word,1)})//reduceByKey是RDD的方法,1.将相同的key先分组;2.再针对每个组计算;(Int,Int)=>Intval result: RDD[(String, Int)] = pairword.reduceByKey((v1:Int, v2:Int)=>{v1+v2})result.foreach(one=>{println(one)})}
}

以上代码可以简化,one=>{println(one)}可以简化为:println。
匿名函数(v1:Int, v2:Int)=>{v1+v2}的v1和v2只使用了一次,可以用_代替,简化为:reduceByKey(+)
word=>{new Tuple2(word,1)}中的Tuple可new可不new,并且还可以只写一个括号。word只用了一次,用_表示,因此简化为map((_,1))
lines在map中只使用了一次,可以用_代替

val conf = new SparkConf().setAppName("wordcount").setMaster("local")
val sc = new SparkContext(conf)
sc.textFile("data/word").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).foreach(println)

利用Scala特性,可以大量的简化代码。但是缺点也很明显,可读性差

用Java实现

package com.husky.java;import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;import java.util.Arrays;
import java.util.Iterator;public class SparkWordCount4Java {public static void main(String[] args) {SparkConf conf = new SparkConf();conf.setMaster("local");conf.setAppName("wc");JavaSparkContext sc = new JavaSparkContext(conf);JavaRDD<String> lines = sc.textFile("data/word");//进来一行,返回一个迭代器JavaRDD<String> words = linesflatMap(new FlatMapFunction<String, String>() {@Overridepublic Iterator<String> call(String s) throws Exception {return Arrays.asList(s.split(" ")).iterator();}
});JavaPairRDD<String, Integer> pairWords = words.mapToPair(new PairFunction<String, String, Integer>() {//进来一个单词,出去一个K-V@Overridepublic Tuple2<String, Integer> call(String s) throws Exception {return new Tuple2<>(s, 1);}});JavaPairRDD<String, Integer> result = pairWords.reduceByKey(new Function2<Integer, Integer, Integer>() {@Overridepublic Integer call(Integer integer, Integer integer2) throws Exception {return integer + integer2;}});//打印result.foreach(new VoidFunction<Tuple2<String, Integer>>() {@Overridepublic void call(Tuple2<String, Integer> tp) throws Exception {System.out.println(tp);}});sc.stop();}
}

用Spark实现简单的单词统计相关推荐

  1. hadoop学习之----------IntelliJ IDEA上实现MapReduce中最简单的单词统计的程序(本地 和 hadoop 两种实现方式)...

    idea上的maven中的pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xm ...

  2. spark 集群单词统计_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成

    Spark 编程模型 在Spark 中, 我们通过对分布式数据集的操作来表达计算意图 ,这些计算会自动在集群上 井行执行 这样的数据集被称为弹性分布式数据集 Resilient Distributed ...

  3. 启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计

    1.启动Spark Shell spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用scala编写spark程序.要注意的是要启动Spark-S ...

  4. 用spark实现单词统计

    1.在本地运行 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext}/*** 用spark ...

  5. 使用Python实现简单的考研英语高频单词统计

    使用Python实现简单的词频统计 前言 anaconda第三方库的安装 代码分享及分析 前言 此次作为一个简单demo分享,闲来试试做一个词频统计统计英语卷子单词出现的次数及频率,具体代码及分析如下 ...

  6. 大数据阶段划分及案例单词统计

    大数据阶段的重要课程划分 离线分析 : hadoop生态圈 HDFS, MapReduce(概念偏多), hive(底层是MapReduce), 离线业务分析80%都是使用hive实时分析 : spa ...

  7. 从单词统计问题看面试

    本文的很多内容来自网络.如有错误,欢迎指出. 问题描写叙述 首先这里对单词的界定是:以空白切割的字符序列. 单词统计的问题能够描写叙述为:在一篇正常格式的英文文档中(作为面试.这里并没有提及中文分词和 ...

  8. c语言文件加密解密单词统计,C语言文件加密解密及单词统计程序.doc

    C语言文件加密解密及单词统计程序.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分  高级语言程序设计 课程设计学 院 计算 ...

  9. Hadoop经典案例——单词统计

    通过 Hadoop经典案例--单词统计,来演示 Hadoop集群的简单使用. (1)打开 HDFS 的 UI,选择Utilities→Browse the file system查看分布式文件系统里的 ...

最新文章

  1. Flutter开发之路由跳转与传参(七)
  2. 【虚拟化】docker构建私有仓库,上传镜像至私有仓库
  3. C++实现深度优先搜索DFS(附完整源码)
  4. 中如何调取api_API(接口)是什么
  5. mysql查最大字符串
  6. zabbix内网安装部署_zabbix2.4.8升级3.0.31操作部署记录
  7. Python min() 方法
  8. datagrip 导出数据库备份到本地
  9. TensorFlow2 tf.keras和keras
  10. Netty-3-服务端接受并打印telnet传递过来的字符串
  11. JS框架设计之对象类型判断一种子模块
  12. 数据结构 实验五(银行叫号系统)
  13. obsidian标题自动添加序号
  14. java 基础知识(不定期更新)
  15. 【location】将url参数转换为对象的形式
  16. Ubuntu18.04 下虚拟机vm16pro 无法连接WIFI问题解决
  17. 南非SABS认证范围
  18. 为什么有的人特别招蚊子?
  19. CF Div2 781
  20. 浙江污水处理厂数字孪生平台建模_三维激光扫描_吉优赛维三维可视化管理平台_三维建模_3D模型

热门文章

  1. Spring boot返回JSON类型响应及Content-Type设置
  2. docker笔记-docker-container
  3. JavaScript学习笔记:检测数组方法
  4. struts2_11_实现自己的拦截器的定义
  5. 在spring web中启动mqtt
  6. win7清除系统托盘图标的方法
  7. 数据类型,运算符和表达式03 - 零基础入门学习C语言04
  8. THU – team project final review score
  9. 今天来说一下我的SAMC
  10. 深入浅出话命令(Command)-笔记(-)