引入:spark-scala-java实现wordcount

1.spark-scala实现wordcount

  1. package com.cw.scala.spark
  2. import org.apache.spark.{SparkConf, SparkContext}
  3. /**
  4. * spark wordcount
  5. * hello java
  6. * hello java
  7. * hello spark
  8. * *
  9. * flatMap:
  10. * hello
  11. * java
  12. * hello
  13. * java
  14. * hello
  15. * spark
  16. * *
  17. * map:
  18. * (hello,1)
  19. * (java,1)
  20. * (hello,1)
  21. * (java,1)
  22. * (hello,1)
  23. * (spark,1)
  24. *
  25. * reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
  26. * 先分组
  27. * (hello,1)
  28. * (hello,1)
  29. * (hello,1)
  30. *
  31. * (java,1)
  32. * (java,1)
  33. *
  34. * (spark,1)
  35. */
  36. object SparkWC {
  37. def main(args: Array[String]): Unit = {
  38. //conf可以设置SparkApplication的名称,设置Spark运行的模式
  39. val conf = new SparkConf().setAppName("wordcount").setMaster("local")
  40. //SparkContext是通往spark集群的唯一通道
  41. val sc = new SparkContext(conf)
  42. //sc.textFiles(path) 能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
  43. sc.textFile("./data/words").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).foreach(println)//这行代码要记住
  44. sc.stop()
  45. // //conf可以设置SparkApplication的名称,设置Spark运行的模式
  46. // val conf = new SparkConf()
  47. // conf.setAppName("wordcount")
  48. // conf.setMaster("local")
  49. // //SparkContext是通往spark集群的唯一通道
  50. // val sc = new SparkContext(conf)
  51. //
  52. // val lines: RDD[String] = sc.textFile("./data/words")
  53. // //flatMap
  54. // val words: RDD[String] = lines.flatMap(line => {
  55. // line.split(" ")
  56. // })
  57. // //KV:二元组
  58. // val pairWords: RDD[(String, Int)] = words.map(word => {
  59. // new Tuple2(word, 1)
  60. // })
  61. // //将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
  62. // val result: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {
  63. // v1 + v2
  64. // })
  65. // result.foreach(one => {
  66. // println(one)
  67. // })
  68. // sc.stop()
  69. }
  70. }

详细版本

  1. package com.cw.scala.spark
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.{SparkConf, SparkContext}
  4. object SparkWC {
  5. def main(args: Array[String]): Unit = {
  6. //conf可以设置SparkApplication的名称,设置Spark运行的模式
  7. val conf = new SparkConf()
  8. conf.setAppName("wordcount")
  9. conf.setMaster("local")
  10. //SparkContext是通往spark集群的唯一通道
  11. val sc = new SparkContext(conf)
  12. //sc.textFiles(path) 能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
  13. val lines: RDD[String] = sc.textFile("./data/words")
  14. lines.foreach(println)
  15. //count:返回数据集中的元素数。会在结果计算完成后回收到Driver端。
  16. val l: Long = lines.count()
  17. println(l)
  18. //take(num):返回一个包含数据集前n个元素的集合。
  19. val strings: Array[String] = lines.take(3)
  20. strings.foreach(println)
  21. //first:first=take(1),返回数据集中的第一个元素。
  22. val str: String = lines.first()
  23. println(str)
  24. //flatMap:先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
  25. val words: RDD[String] = lines.flatMap(line => {
  26. line.split(" ")
  27. })
  28. words.foreach(println)
  29. //map:将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
  30. val pairWords: RDD[(String, Int)] = words.map(word => {
  31. new Tuple2(word, 1)
  32. })
  33. pairWords.foreach(println)
  34. //reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
  35. val result: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {
  36. v1 + v2
  37. })
  38. //foreach:循环遍历数据集中的每个元素,运行相应的逻辑。
  39. result.foreach(println)
  40. sc.stop()
  41. }
  42. }
  43. =======================运行结果========================
  44. //textFile:能将path里的所有文件内容读出,以文件中的每一行作为一条记录的方式
  45. hello java
  46. hello spark
  47. hello hadoop
  48. hello mr
  49. hello java
  50. hello spark
  51. hello scala
  52. hello mr
  53. //count:返回数据集中的元素数。会在结果计算完成后回收到Driver端。
  54. 8
  55. //take(3):返回一个包含数据集前n个元素的集合。
  56. hello java
  57. hello spark
  58. hello hadoop
  59. //first:返回数据集中的第一个元素。
  60. hello java
  61. //flatMap:先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
  62. hello
  63. java
  64. hello
  65. spark
  66. hello
  67. hadoop
  68. hello
  69. mr
  70. hello
  71. java
  72. hello
  73. spark
  74. hello
  75. scala
  76. hello
  77. mr
  78. //map:将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
  79. (hello,1)
  80. (java,1)
  81. (hello,1)
  82. (spark,1)
  83. (hello,1)
  84. (hadoop,1)
  85. (hello,1)
  86. (mr,1)
  87. (hello,1)
  88. (java,1)
  89. (hello,1)
  90. (spark,1)
  91. (hello,1)
  92. (scala,1)
  93. (hello,1)
  94. (mr,1)
  95. //reduceByKey:将相同的key先分组,再针对每一个组去计算,对每一个组内的value计算
  96. (scala,1)
  97. (spark,2)
  98. (hadoop,1)
  99. (mr,2)
  100. (hello,8)
  101. (java,2)

2.spark-java实现wordcount

  1. package com.cw.java.spark;
  2. import org.apache.spark.SparkConf;
  3. import org.apache.spark.api.java.JavaPairRDD;
  4. import org.apache.spark.api.java.JavaRDD;
  5. import org.apache.spark.api.java.JavaSparkContext;
  6. import org.apache.spark.api.java.function.FlatMapFunction;
  7. import org.apache.spark.api.java.function.Function2;
  8. import org.apache.spark.api.java.function.PairFunction;
  9. import org.apache.spark.api.java.function.VoidFunction;
  10. import scala.Tuple2;
  11. import java.util.Arrays;
  12. import java.util.Iterator;
  13. public class SparkWordCount {
  14. public static void main(String[] args) {
  15. SparkConf conf = new SparkConf();
  16. conf.setMaster("local");
  17. conf.setAppName("wc");
  18. JavaSparkContext sc = new JavaSparkContext(conf);
  19. //sc.textFiles(path) 能将path 里的所有文件内容读出,以文件中的每一行作为一条记录的方式,
  20. JavaRDD<String> lines = sc.textFile("./data/words");
  21. JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
  22. @Override
  23. public Iterator<String> call(String line) throws Exception {
  24. return Arrays.asList(line.split(" ")).iterator();
  25. }
  26. });
  27. JavaPairRDD<String, Integer> pairWords = words.mapToPair(new PairFunction<String, String, Integer>() {
  28. @Override
  29. public Tuple2<String, Integer> call(String s) throws Exception {
  30. return new Tuple2<>(s, 1);
  31. }
  32. });
  33. /**
  34. * new Function2<Integer, Integer, Integer>() 如在(hello,1) (hello,1) (hello,1) 第一个hello为1赋给v1,第二个hello为1赋给v2,返回结果v1+v2=2
  35. * 下一条将2自动赋给v1,第三个hello的1赋给v2 返回v1+v2=3
  36. */
  37. JavaPairRDD<String, Integer> result = pairWords.reduceByKey(new Function2<Integer, Integer, Integer>() {
  38. @Override
  39. public Integer call(Integer v1, Integer v2) throws Exception {
  40. return v1 + v2;
  41. }
  42. });
  43. result.foreach(new VoidFunction<Tuple2<String, Integer>>() {
  44. @Override
  45. public void call(Tuple2<String, Integer> tp) throws Exception {
  46. System.out.println(tp);
  47. }
  48. });
  49. sc.stop();
  50. }
  51. }

spark-scala-java实现wordcount的更多相关文章

  1. Spark:用Scala和Java实现WordCount

    http://www.cnblogs.com/byrhuangqiang/p/4017725.html 为了在IDEA中编写scala,今天安装配置学习了IDEA集成开发环境.IDEA确实很优秀,学会 ...

  2. Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐)

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  3. Spark scala和java的api使用

    1.利用scala语言开发spark的worcount程序(本地运行) package com.zy.spark import org.apache.spark.rdd.RDD import org. ...

  4. Eclipse+Maven+Scala Project+Spark | 编译并打包wordcount程序

    学习用Eclipse+Maven来构建并打包一个简单的单词统计的例程. 本项目源码已托管于Github –>[Spark-wordcount] 第一步 在EclipseIDE中安装Scala插件 ...

  5. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)

    梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...

  6. Spark机器学习1·编程入门(scala/java/python)

    Spark安装目录 /Users/erichan/Garden/spark-1.4.0-bin-hadoop2.6 基本测试 ./bin/run-example org.apache.spark.ex ...

  7. demo1 spark streaming 接收 kafka 数据java代码WordCount示例

    1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...

  8. Spark使用Java、Scala 读取mysql、json、csv数据以及写入操作

    Spark使用Java读取mysql数据和保存数据到mysql 一.pom.xml 二.spark代码 2.1 Java方式 2.2 Scala方式 三.写入数据到mysql中 四.DataFrame ...

  9. spark之java程序开发

    spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...

  10. Spark(一)wordcount

    Spark(一)wordcount 一.新建一个scala项目 在maven中导入 <!-- https://mvnrepository.com/artifact/org.apache.spar ...

随机推荐

  1. HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )

    题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大   分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...

  2. jQuery系列(三):jQuery动画效果

    jQuery提供的一组网页中常见的动画效果,这些动画是标准的.有规律的效果:同时还提供给我们了自定义动画的功能. 1.显示动画 方式一: $("div").show(); 解释:无 ...

  3. windbg双机调试配置[转]

    原文 windbg已不提供单独下载,wdk驱动开发工具包里附带有这个调试器.官网提供下载: http://msdn.microsoft.com/en-us/windows/hardware/gg487 ...

  4. 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= ...

  5. Flutter打开第三方应用

    在flutter中打开第三方应用可以使用url_launcher插件 打开https://pub.dartlang.org/,然后搜索url_launcher,然后点击进入该插件界面 大家在insta ...

  6. ArcGIS Python获得一个图层所有线长

    import arcpy # Create an empty Geometry object # g = arcpy.Geometry() # Run the CopyFeatures tool, s ...

  7. linux向文件中添加数据,数据被追加到了上一行的行尾

    当我们在windows上新建了文件,并且要上传到linux上时,一定要在文件后加上空格,否则就会出现标题上讲的,数据被追加到了上一行的行尾,而不是新起一行,但是如果是在linux上新建的文件,则没有这 ...

  8. 对 Python 迭代的深入研究

    在程序设计中,通常会有 loop.iterate.traversal 和 recursion 等概念,他们各自的含义如下: 循环(loop),指的是在满足条件的情况下,重复执行同一段代码.比如 Pyt ...

  9. k8s部署03-----常用运维命令

    kubectl常用命令 kubectl get nodes #查看集群中有多少个node kubectl describe node <node_name> #查看某个node的详细信息 ...

  10. Rsync数据同步工具及sersync同步工具

    Rsync简介 Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似s ...