热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spark从入门到放弃一:worldcountjava

文章地址:http:www.haha174.toparticledetails253584项目源码:https:github.comhaha174spa

文章地址:http://www.haha174.top/article/details/253584
项目源码:https://github.com/haha174/spark.git
开启spark 从入门到放弃/笑哭。下面不多说来写一个hello world 压压惊。
之前搭建集群用的是 spark 2.2 hadoop 2.9
所以开发的需要引入如下的依赖

<properties><project.build.sourceEncoding>UTF-8project.build.sourceEncoding><spark.version>2.2.1spark.version><java.version>1.8java.version><hadoop.version>2.9.0hadoop.version>properties><dependencies><dependency><groupId>junitgroupId><artifactId>junitartifactId><version>4.12version><scope>testscope>dependency><dependency><groupId>org.apache.sparkgroupId><artifactId>spark-core_2.10artifactId><version>${spark.version}version>dependency><dependency><groupId>org.apache.sparkgroupId><artifactId>spark-sql_2.10artifactId><version>${spark.version}version>dependency><dependency><groupId>org.apache.sparkgroupId><artifactId>spark-hive_2.10artifactId><version>${spark.version}version>dependency><dependency><groupId>org.apache.sparkgroupId><artifactId>spark-streaming_2.10artifactId><version>${spark.version}version>dependency><dependency><groupId>org.apache.hadoopgroupId><artifactId>hadoop-clientartifactId><version>${hadoop.version}version>dependency><dependency><groupId>org.apache.sparkgroupId><artifactId>spark-streaming-kafka_2.11artifactId><version>1.6.2version>dependency>dependencies>

/*** 第一步 &#xff0c;创建SparkConf* setMaster 设置 集群 master的url 如果设置为local 表示在本地运行*/SparkConf conf&#61;new SparkConf().setAppName("WorldCountLocal").setMaster("local");

/**
* 第二步 创建SparkContext 对象
* 在spark 中SparkContext 是spark 所有功能的入口 无论使用的是java scala 甚至py 编写都必须有一个SparkContext
* 它的主要作用包括初始化spark 应用程序所需要的一些核心组件&#xff0c;包括调度器&#xff08;DAGSchedule,taskScheduler&#xff09;,他还会去spark master 节点上去注册等等
* 但是呢&#xff0c;在spark中编写不同类型的spark 应用程序&#xff0c;使用的SparkContext
* 如果使用scala 使用 使用原生的SparkContext
* 如果使用java 那么就是用JavaSparkContext
* 如果使用Spark Sql 程序 那么就是 SQLContext,HiveContext
* 如果开发Spark Streaming 程序 那么就是它独有的SparkContext
* 以此类推
*/

JavaSparkContext sc&#61;new JavaSparkContext(conf);

/**
* 第三步&#xff1a; 要针对输入源&#xff08;hdfs文件,本地文件,等等&#xff09;创建一个初始的RDD
* 输入源中的数据会被打散&#xff0c;分配到RDD的每个partition 中从而形成一个初始的分布式数据集
* 本次测试 所以针对本地文件
* SparkContext 中用于根据文件 类型的输入源创建RDD 的方法&#xff0c;叫做textFile()
* 在我们这里呢 RDD 中 有元素这种概念 如果是 hdfs 或者本地文件呢 创建RDD 每一个文件就相当于文件里面的一行
*/

JavaRDD lines&#61;sc.textFile("C:\\Users\\haha174\\Desktop\\data\\world-count.txt");

// 第四步&#xff1a;对初始RDD进行transformation操作&#xff0c;也就是一些计算操作
// 通常操作会通过创建function&#xff0c;并配合RDD的map、flatMap等算子来执行
// function&#xff0c;通常&#xff0c;如果比较简单&#xff0c;则创建指定Function的匿名内部类
// 但是如果function比较复杂&#xff0c;则会单独创建一个类&#xff0c;作为实现这个function接口的类
// 先将每一行拆分成单个的单词
// FlatMapFunction&#xff0c;有两个泛型参数&#xff0c;分别代表了输入和输出类型
// 我们这里呢&#xff0c;输入肯定是String&#xff0c;因为是一行一行的文本&#xff0c;输出&#xff0c;其实也是String&#xff0c;因为是每一行的文本
// 这里先简要介绍flatMap算子的作用&#xff0c;其实就是&#xff0c;将RDD的一个元素&#xff0c;给拆分成一个或多个元素
JavaRDD<String> words &#61; lines.flatMap(new FlatMapFunction<String, String>() {
public Iterator<String> call(String s) throws Exception {
return Arrays.asList(s.split("-")) .iterator();
}
});

// 接着&#xff0c;需要将每一个单词&#xff0c;映射为(单词, 1)的这种格式
// 因为只有这样&#xff0c;后面才能根据单词作为key&#xff0c;来进行每个单词的出现次数的累加
// mapToPair&#xff0c;其实就是将每个元素&#xff0c;映射为一个(v1,v2)这样的Tuple2类型的元素
// 如果大家还记得scala里面讲的tuple&#xff0c;那么没错&#xff0c;这里的tuple2就是scala类型&#xff0c;包含了两个值
// mapToPair这个算子&#xff0c;要求的是与PairFunction配合使用&#xff0c;第一个泛型参数代表了输入类型
// 第二个和第三个泛型参数&#xff0c;代表的输出的Tuple2的第一个值和第二个值的类型
// JavaPairRDD的两个泛型参数&#xff0c;分别代表了tuple元素的第一个值和第二个值的类型
JavaPairRDD pairs &#61; words.mapToPair(new PairFunction() {private static final long serialVersionUID &#61; 1L;public Tuple2 call(String word) throws Exception {return new Tuple2(word, 1);}});
// 接着&#xff0c;需要以单词作为key&#xff0c;统计每个单词出现的次数
// 这里要使用reduceByKey这个算子&#xff0c;对每个key对应的value&#xff0c;都进行reduce操作
// 比如JavaPairRDD中有几个元素&#xff0c;分别为(hello, 1) (hello, 1) (hello, 1) (world, 1)
// reduce操作&#xff0c;相当于是把第一个值和第二个值进行计算&#xff0c;然后再将结果与第三个值进行计算
// 比如这里的hello&#xff0c;那么就相当于是&#xff0c;首先是1 &#43; 1 &#61; 2&#xff0c;然后再将2 &#43; 1 &#61; 3
// 最后返回的JavaPairRDD中的元素&#xff0c;也是tuple&#xff0c;但是第一个值就是每个key&#xff0c;第二个值就是key的value
// reduce之后的结果&#xff0c;相当于就是每个单词出现的次数
/*** public interface Function2 extends Serializable {*R call(T1 var1, T2 var2) throws Exception;*}* 第三个参数表示返回类型*/
JavaPairRDD wordCounts &#61; pairs.reduceByKey(new Function2() {private static final long serialVersionUID &#61; 1L;public Integer call(Integer v1, Integer v2) throws Exception {return v1 &#43; v2;}});
// 到这里为止&#xff0c;我们通过几个Spark算子操作&#xff0c;已经统计出了单词的次数

// 到这里为止&#xff0c;我们通过几个Spark算子操作&#xff0c;已经统计出了单词的次数// 但是&#xff0c;之前我们使用的flatMap、mapToPair、reduceByKey这种操作&#xff0c;都叫做transformation操作// 一个Spark应用中&#xff0c;光是有transformation操作&#xff0c;是不行的&#xff0c;是不会执行的&#xff0c;必须要有一种叫做action// 接着&#xff0c;最后&#xff0c;可以使用一种叫做action操作的&#xff0c;比如说&#xff0c;foreach&#xff0c;来触发程序的执行wordCounts.foreach(new VoidFunction>() {private static final long serialVersionUID &#61; 1L;public void call(Tuple2 wordCount) throws Exception {System.out.println(wordCount._1 &#43; " appeared " &#43; wordCount._2 &#43; " times.");}});sc.close();
}


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
author-avatar
尔的依恋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有