spark-scala-java实现wordcount
引入:spark-scala-java实现wordcount
1.spark-scala实现wordcount
package com.cw.scala.spark
import org.apache.spark.{SparkConf, SparkContext}
/**
* spark wordcount
* hello java
* hello java
* hello spark
* *
* flatMap:
* hello
* java
* hello
* java
* hello
* spark
* *
* map:
* (hello,1)
* (java,1)
* (hello,1)
* (java,1)
* (hello,1)
* (spark,1)
*
* reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
* 先分组
* (hello,1)
* (hello,1)
* (hello,1)
*
* (java,1)
* (java,1)
*
* (spark,1)
*/
object SparkWC {
def main(args: Array[String]): Unit = {
//conf可以设置SparkApplication的名称,设置Spark运行的模式
val conf = new SparkConf().setAppName("wordcount").setMaster("local")
//SparkContext是通往spark集群的唯一通道
val sc = new SparkContext(conf)
//sc.textFiles(path) 能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
sc.textFile("./data/words").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).foreach(println)//这行代码要记住
sc.stop()
// //conf可以设置SparkApplication的名称,设置Spark运行的模式
// val conf = new SparkConf()
// conf.setAppName("wordcount")
// conf.setMaster("local")
// //SparkContext是通往spark集群的唯一通道
// val sc = new SparkContext(conf)
//
// val lines: RDD[String] = sc.textFile("./data/words")
// //flatMap
// val words: RDD[String] = lines.flatMap(line => {
// line.split(" ")
// })
// //KV:二元组
// val pairWords: RDD[(String, Int)] = words.map(word => {
// new Tuple2(word, 1)
// })
// //将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
// val result: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {
// v1 + v2
// })
// result.foreach(one => {
// println(one)
// })
// sc.stop()
}
}
详细版本
package com.cw.scala.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object SparkWC {
def main(args: Array[String]): Unit = {
//conf可以设置SparkApplication的名称,设置Spark运行的模式
val conf = new SparkConf()
conf.setAppName("wordcount")
conf.setMaster("local")
//SparkContext是通往spark集群的唯一通道
val sc = new SparkContext(conf)
//sc.textFiles(path) 能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
val lines: RDD[String] = sc.textFile("./data/words")
lines.foreach(println)
//count:返回数据集中的元素数。会在结果计算完成后回收到Driver端。
val l: Long = lines.count()
println(l)
//take(num):返回一个包含数据集前n个元素的集合。
val strings: Array[String] = lines.take(3)
strings.foreach(println)
//first:first=take(1),返回数据集中的第一个元素。
val str: String = lines.first()
println(str)
//flatMap:先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
val words: RDD[String] = lines.flatMap(line => {
line.split(" ")
})
words.foreach(println)
//map:将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
val pairWords: RDD[(String, Int)] = words.map(word => {
new Tuple2(word, 1)
})
pairWords.foreach(println)
//reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
val result: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {
v1 + v2
})
//foreach:循环遍历数据集中的每个元素,运行相应的逻辑。
result.foreach(println)
sc.stop()
}
}
=======================运行结果========================
//textFile:能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
hello java
hello spark
hello hadoop
hello mr
hello java
hello spark
hello scala
hello mr
//count:返回数据集中的元素数。会在结果计算完成后回收到Driver端。
8
//take(3):返回一个包含数据集前n个元素的集合。
hello java
hello spark
hello hadoop
//first:返回数据集中的第一个元素。
hello java
//flatMap:先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
hello
java
hello
spark
hello
hadoop
hello
mr
hello
java
hello
spark
hello
scala
hello
mr
//map:将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
(hello,1)
(java,1)
(hello,1)
(spark,1)
(hello,1)
(hadoop,1)
(hello,1)
(mr,1)
(hello,1)
(java,1)
(hello,1)
(spark,1)
(hello,1)
(scala,1)
(hello,1)
(mr,1)
//reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
(scala,1)
(spark,2)
(hadoop,1)
(mr,2)
(hello,8)
(java,2)
2.spark-java实现wordcount
package com.cw.java.spark;
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 SparkWordCount {
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local");
conf.setAppName("wc");
JavaSparkContext sc = new JavaSparkContext(conf);
//sc.textFiles(path) 能将path 里的所有文件内容读出,以文件中的每一行作为一条记录的方式,
JavaRDD<String> lines = sc.textFile("./data/words");
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String line) throws Exception {
return Arrays.asList(line.split(" ")).iterator();
}
});
JavaPairRDD<String, Integer> pairWords = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<>(s, 1);
}
});
/**
* new Function2<Integer, Integer, Integer>() 如在(hello,1) (hello,1) (hello,1) 第一个hello为1赋给v1,第二个hello为1赋给v2,返回结果v1+v2=2
* 下一条将2自动赋给v1,第三个hello的1赋给v2 返回v1+v2=3
*/
JavaPairRDD<String, Integer> result = pairWords.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
@Override
public void call(Tuple2<String, Integer> tp) throws Exception {
System.out.println(tp);
}
});
sc.stop();
}
}
spark-scala-java实现wordcount的更多相关文章
- Spark:用Scala和Java实现WordCount
http://www.cnblogs.com/byrhuangqiang/p/4017725.html 为了在IDEA中编写scala,今天安装配置学习了IDEA集成开发环境.IDEA确实很优秀,学会 ...
- Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- Spark scala和java的api使用
1.利用scala语言开发spark的worcount程序(本地运行) package com.zy.spark import org.apache.spark.rdd.RDD import org. ...
- Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序
学习用Eclipse+Maven来构建并打包一个简单的单词统计的例程. 本项目源码已托管于Github –>[Spark-wordcount] 第一步 在EclipseIDE中安装Scala插件 ...
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...
- Spark机器学习1·编程入门(scala/java/python)
Spark安装目录 /Users/erichan/Garden/spark-1.4.0-bin-hadoop2.6 基本测试 ./bin/run-example org.apache.spark.ex ...
- demo1 spark streaming 接收 kafka 数据java代码WordCount示例
1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...
- Spark使用Java、Scala 读取mysql、json、csv数据以及写入操作
Spark使用Java读取mysql数据和保存数据到mysql 一.pom.xml 二.spark代码 2.1 Java方式 2.2 Scala方式 三.写入数据到mysql中 四.DataFrame ...
- spark之java程序开发
spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...
- Spark(一)wordcount
Spark(一)wordcount 一.新建一个scala项目 在maven中导入 <!-- https://mvnrepository.com/artifact/org.apache.spar ...
随机推荐
- HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大 分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...
- jQuery系列(三):jQuery动画效果
jQuery提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 1.显示动画 方式一: $("div").show(); 解释:无 ...
- windbg双机调试配置[转]
原文 windbg已不提供单独下载,wdk驱动开发工具包里附带有这个调试器.官网提供下载: http://msdn.microsoft.com/en-us/windows/hardware/gg487 ...
- python小技巧之把list组合成chain
a=[] for i in range(10): a.append(i) for i,j in zip(a[:-1],a[1:]): print('%s=>%s'%(i,j)) 输出结果: 0= ...
- Flutter打开第三方应用
在flutter中打开第三方应用可以使用url_launcher插件 打开https://pub.dartlang.org/,然后搜索url_launcher,然后点击进入该插件界面 大家在insta ...
- ArcGIS Python获得一个图层所有线长
import arcpy # Create an empty Geometry object # g = arcpy.Geometry() # Run the CopyFeatures tool, s ...
- linux向文件中添加数据,数据被追加到了上一行的行尾
当我们在windows上新建了文件,并且要上传到linux上时,一定要在文件后加上空格,否则就会出现标题上讲的,数据被追加到了上一行的行尾,而不是新起一行,但是如果是在linux上新建的文件,则没有这 ...
- 对 Python 迭代的深入研究
在程序设计中,通常会有 loop.iterate.traversal 和 recursion 等概念,他们各自的含义如下: 循环(loop),指的是在满足条件的情况下,重复执行同一段代码.比如 Pyt ...
- k8s部署03-----常用运维命令
kubectl常用命令 kubectl get nodes #查看集群中有多少个node kubectl describe node <node_name> #查看某个node的详细信息 ...
- Rsync数据同步工具及sersync同步工具
Rsync简介 Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似s ...