目的:统计唐诗三百首全集每个汉字出现的次数

软件需求:

下载 Eclipse ,安装Maven
安装好JDK1.8
下载并配置了hadoop-2.7.3     spark-2.2.0-bin-hadoop2.7
步骤:
1,创建Maven Project

根据提示一步步走
---选择 Maven-archetype-quickstart 选项

下一步:
填写好Group id 和artifact id  点击完成

下一步修改pom配置,将配置修改如下:






<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dt.spark</groupId><artifactId>sparkApps</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>sparkApps</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.10</artifactId><version>1.6.0</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.10</artifactId><version>1.6.0</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.10</artifactId><version>1.6.0</version></dependency></dependencies><build><sourceDirectory>src/main/java</sourceDirectory><testSourceDirectory>src/main/test</testSourceDirectory><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><maniClass></maniClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.3.1</version><executions><execution><goals><goal>exec</goal></goals></execution></executions><configuration><executable>java</executable><includeProjectDependencies>false</includeProjectDependencies><classpathScope>compile</classpathScope><mainClass>com.dt.spark.SparkApps.WordCount</mainClass></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins>
</build>
</project>//完成以后等待自动安装好JAR包即可Eclipse会下载 相关的Jar文件
//关于pom.xml文件的配置,可以通过以下网站(Maven中央仓库信息速查 http://maven.outofmemory.cn/org.apache.spark/)
//搜索并对照修改,如要查找 spark-streaming_2.10 的依赖包的话,可以点击并对应找到。

如果下载更新时出现错误,忽略!

安装好之后在在这个包下面新建一个包,然后在包下面新建一个Java类WordCount1

package com.dt.spark.sparkApps.cores;import java.util.Arrays;
import java.util.List;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.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;import scala.Tuple2;  public final class WordCount1 {  public static void main(String[] args) throws Exception {  //context ,用于读文件 ,类似于scala的sc  //格式为:  // JavaSparkContext(master: String, appName: String, sparkHome: String, jars: Array[String], environment: Map[String, String])  /* JavaSparkContext ctx = new JavaSparkContext("yarn-standalone", "JavaWordCount",  System.getenv("SPARK_HOME"), JavaSparkContext.jarOfClass(WordCount1.class)); */ SparkConf conf =new SparkConf().setAppName("Spark WordCount written by java").setMaster("local");//本地测试JavaSparkContext ctx=new JavaSparkContext(conf);//也可以使用ctx获取环境变量,例如下面的语句  System.out.println("spark home:"+ctx.getSparkHome());  //一次一行,String类型    ,还有hadoopfile,sequenceFile什么的  ,可以直接用sc.textFile("path")  JavaRDD<String> lines = ctx.textFile("D:\\迅雷下载\\唐诗三百首(全集).txt");  //java.lang.String path, int minSplits  lines.cache();   //cache,暂时放在缓存中,一般用于哪些可能需要多次使用的RDD,据说这样会减少运行时间  //collect方法,用于将RDD类型转化为java基本类型,如下  List<String> line = lines.collect();  for(String val:line)  System.out.println(val);  //下面这些也是RDD的常用函数  // lines.collect();  List<String>  // lines.union();     javaRDD<String>  // lines.top(1);     List<String>  // lines.count();      long  // lines.countByValue();  /** *   filter test *   定义一个返回bool类型的函数,spark运行filter的时候会过滤掉那些返回只为false的数据 *   String s,中的变量s可以认为就是变量lines(lines可以理解为一系列的String类型数据)的每一条数据 */  JavaRDD<String> contaninsE = lines.filter(new Function<String, Boolean>() {  public Boolean call(String s) throws Exception {  return (s.contains("they"));  }  });  System.out.println("--------------next filter's  result------------------");  line = contaninsE.collect();  for(String val:line)  System.out.println(val);  /** * sample test * sample函数使用很简单,用于对数据进行抽样 * 参数为:withReplacement: Boolean, fraction: Double, seed: Int * */  JavaRDD<String> sampletest = lines.sample(false,0.1,5);  System.out.println("-------------next sample-------------------");  line = sampletest.collect();  for(String val:line)  System.out.println(val);  /** * * new FlatMapFunction<String, String>两个string分别代表输入和输出类型 * Override的call方法需要自己实现一个转换的方法,并返回一个Iterable的结构 * * flatmap属于一类非常常用的spark函数,简单的说作用就是将一条rdd数据使用你定义的函数给分解成多条rdd数据 * 例如,当前状态下,lines这个rdd类型的变量中,每一条数据都是一行String,我们现在想把他拆分成1个个的词的话, * 可以这样写 : */  JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {  public Iterable<String> call(String s) {  String[] words=s.split("");  return Arrays.asList(words);  }  });  /** * map 键值对 ,类似于MR的map方法 * pairFunction<T,K,V>: T:输入类型;K,V:输出键值对 * 需要重写call方法实现转换 */  JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {  public Tuple2<String, Integer> call(String s) {  return new Tuple2<String, Integer>(s, 1);  }  });  /** *  reduceByKey方法,类似于MR的reduce *  要求被操作的数据(即下面实例中的ones)是KV键值对形式,该方法会按照key相同的进行聚合,在两两运算 */  JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {  public Integer call(Integer i1, Integer i2) {  //reduce阶段,key相同的value怎么处理的问题  return i1 + i2;  }  });  //备注:spark也有reduce方法,输入数据是RDD类型就可以,不需要键值对,  // reduce方法会对输入进来的所有数据进行两两运算  JavaPairRDD<String,Integer> sort = counts.sortByKey();  System.out.println("----------next sort----------------------");  /** * collect方法其实之前已经出现了多次,该方法用于将spark的RDD类型转化为我们熟知的java常见类型 */  List<Tuple2<String, Integer>> output = sort.collect();  for (Tuple2<?,?> tuple : output) {  System.out.println(tuple._1 + ": " + tuple._2());  }  /** * 保存函数,数据输出,spark为结果输出提供了很多接口 */  sort.saveAsTextFile("/tmp/spark-tmp/test");  // sort.saveAsNewAPIHadoopFile();  //  sort.saveAsHadoopFile();  System.exit(0);  }
}  

缺点:不能对汉字按照发音排序!后续改进

使用maven构建一个基于Java的spark应用程序用于统计唐诗三百首中各汉字出现的次数相关推荐

  1. 云效(原RDC)如何构建一个基于Maven的Java项目

    最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...

  2. 云效(原RDC)如何构建一个基于Composer的PHP项目

    最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...

  3. RDC如何构建一个基于NodeJS的前后端项目

    摘要: 最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会 ...

  4. 怎么从头开始构建一个基于web浏览器的云游戏平台--前言——带目录

    怎么从头开始构建一个基于web浏览器的云游戏平台–前言 今天开一个新坑,公司突然开始涉及云游戏,还要基于web端,区别于现有的大多数云游戏平台,有点类似于在国内搞一个谷歌云游戏的模式,自己本身对云游戏 ...

  5. 一个基于Java的syslog服务器,大家都来看看啊!

    一个基于Java的syslog服务器 前言 前期准备 功能效果图 接收到的数据只能输出到控制台的问题解决方法 具体代码 结语 前言 当时接到要开发syslog功能时,我的表情是这样的- 啥是syslo ...

  6. 构建meteor应用程序_我如何在一个月内构建一个复杂的文本分析应用程序

    构建meteor应用程序 by Jeffrey Flynt 由Jeffrey Flynt 我如何在一个月内构建一个复杂的文本分析应用程序 (How I built a complex text ana ...

  7. 基于Java语言的安卓程序编程之一环境搭建2

    3 Eclipse及其插件的安装 Eclipse可以看成是Java的集成开发环境.基于Java语言的安卓程序编程就是在Eclipse上进行的.Eclipse附带了一个标准的插件集,通过Eclipse可 ...

  8. 卡路里计算JAVA_pedometer 这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健 238万源代码下载...

    详细说明:这是一个基于android平台的软件,用于计算你走路的步数,算出消耗的卡路里,以达到健康的管理.-This is an android platform based software, us ...

  9. AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc

    一个基于AVR单片机的计算器程序 #include #include//延时函数的头文件 #include // 中断函数的头文件 #define uint unsigned int #define ...

最新文章

  1. 黄仁勋从煤气灶下取出最新GPU:7nm全新安培架构,售价20万美元,训练性能顶6张V100...
  2. 日常生活小技巧 -- win10造字
  3. kubeadm部署k8s_(Ansible)三分钟部署一套高可用/可扩展的kubeadm集群
  4. 数据结构入门学习笔记-1
  5. li 字多出了省略号_文字溢出自动显示省略号css方法 -
  6. 简明 ASP.NET Core 手册
  7. diy一个android手机版下载,原神个人自制版
  8. 信号与系统实验:信号抽样
  9. .net core json 为null输出_SpringBoot实战(九):标准化json返回值
  10. 计算机科学技术技术的发展趋势,计算机科学与技术的发展趋势分析
  11. html5 dat.gui,Dat.gui 使用教程
  12. BlackBerry上网初体验
  13. 怎么入门学习Java编程
  14. 你有一份七夕赚钱指南等待签收
  15. [usaco6.1.1Postal Vans]
  16. H3C交换机命名与板卡命名
  17. mysqldump单个库导出_mysql mysqldump只导出表结构或只导出数据的实现方法
  18. 织梦图集php,dedecms织梦文章模型增加图集功能教程
  19. asp毕业设计—— 基于asp+access的网上花店设计与实现(毕业论文+程序源码)——网上花店
  20. oracle设计初级,oracle 开发设计一些规范经验

热门文章

  1. VBA之正则表达式(37)-- 去除无意义的零
  2. 做流量站,没有资源,除了外链我们还能做什么?
  3. 太高兴了。。找到了《电机及拖动基础》第四版,下册的答案了。。给大家分享一下。。
  4. 游戏搭建步骤,自己怎么开发qp软件
  5. PSTN与VOIP基础
  6. XToolsCRM的“企业维生素”理念让忙于不忙只在一瞬之间
  7. Lift-Splat-Shoot:论文、代码解析
  8. 没有显卡怎么使用anaconda配置tensorflow深度学习环境
  9. 修改VirtualBox虚拟硬盘VMDK大小
  10. (附源码)ssm医院挂号系统 毕业设计 250858