1.Java SparkCore编程

  入口是:JavaSparkContext
    基本的RDD是:JavaRDD
    其他常用RDD: JavaPairRDD
  JavaRDD和JavaPairRDD转换:
    JavaRDD => JavaPairRDD: 通过mapToPair函数
    JavaPairRDD => JavaRDD: 通过map函数转换

2.前提

  运行前将core-site.xml复制到resource文件夹中

3.程序  

  1. package com.ibeifeng.senior;
  2.  
  3. import org.apache.spark.SparkConf;
  4. import org.apache.spark.api.java.JavaPairRDD;
  5. import org.apache.spark.api.java.JavaRDD;
  6. import org.apache.spark.api.java.JavaSparkContext;
  7. import org.apache.spark.api.java.function.FlatMapFunction;
  8. import org.apache.spark.api.java.function.Function2;
  9. import org.apache.spark.api.java.function.PairFunction;
  10. import org.apache.spark.api.java.function.VoidFunction;
  11. import scala.Tuple2;
  12.  
  13. import java.sql.Connection;
  14. import java.sql.DriverManager;
  15. import java.sql.PreparedStatement;
  16. import java.util.Arrays;
  17. import java.util.Iterator;
  18.  
  19. /**
  20. * Java实现Spark的WordCount程序
  21. * Created by ibf on 02/15.
  22. */
  23. public class JavaWordCountSparkCore {
  24. public static void main(String[] args) {
  25. String resultHDFSSavePath = "/beifeng/spark/result/wordcount/" + System.currentTimeMillis();
  26. // 1. 创建SparkConf配置信息
  27. SparkConf conf = new SparkConf()
  28. .setMaster("local[*]")
  29. .setAppName("spark-wordcount");
  30.  
  31. // 2. 创建SparkContext对象,在java编程中,该对象叫做JavaSparkContext
  32. JavaSparkContext sc = new JavaSparkContext(conf);
  33.  
  34. // 3. 从hdfs读取文件形成RDD
  35. // TODO: 文件路径自行给定
  36. JavaRDD<String> rdd = sc.textFile("/hive/common.db/dept");
  37.  
  38. // 4. RDD数据处理
  39. // TODO: 过滤特殊字符
  40. // 4.1 行数据的分割,调用flatMap函数
  41. JavaRDD<String> wordRDD = rdd.flatMap(new FlatMapFunction<String, String>() {
  42. @Override
  43. public Iterable<String> call(String s) throws Exception {
  44. String line = s;
  45. if (line == null) line = "";
  46. String[] arr = line.split("\t");
  47. return Arrays.asList(arr);
  48. }
  49. });
  50.  
  51. // 4.2 将数据转换为key/value键值对
  52. /**
  53. * RDD的reduceByKey函数不是RDD类中,通过隐式转换后,存在于其他类中<br/>
  54. * Java由于不存在隐式转换,所以不能直接调用map函数进行key/value键值对转换操作,必须调用特定的函数
  55. * */
  56. JavaPairRDD<String, Integer> wordCountRDD = wordRDD.mapToPair(new PairFunction<String, String, Integer>() {
  57. @Override
  58. public Tuple2<String, Integer> call(String s) throws Exception {
  59. return new Tuple2<String, Integer>(s, 1);
  60. }
  61. });
  62.  
  63. // 4.3 聚合结果
  64. JavaPairRDD<String, Integer> resultRDD = wordCountRDD.reduceByKey(new Function2<Integer, Integer, Integer>() {
  65.  
  66. @Override
  67. public Integer call(Integer v1, Integer v2) throws Exception {
  68. return v1 + v2;
  69. }
  70. });
  71.  
  72. // 5. 结果输出
  73. // 5.1 结果输出到HDFS
  74. resultRDD.saveAsTextFile(resultHDFSSavePath);
  75. // 5.2 结果输出到MySQL
  76. /**
  77. * SparkCore RDD数据的读入是通过InputFormat来读入数据形成RDD的
  78. * sc.newAPIHadoopRDD[K, V, F <: NewInputFormat[K, V]](
  79. conf: Configuration,
  80. fClass: Class[F],
  81. kClass: Class[K],
  82. vClass: Class[V])
  83. * RDD的saveASxxxx相关方法是利用OutputFormat来进行数据输出的
  84. * resultRDD.saveAsNewAPIHadoopDataset(conf: Configuration);
  85. */
  86. resultRDD.foreachPartition(new VoidFunction<java.util.Iterator<Tuple2<String, Integer>>>() {
  87.  
  88. @Override
  89. public void call(Iterator<Tuple2<String, Integer>> tuple2Iterator) throws Exception {
  90. Class.forName("com.mysql.jdbc.Driver");
  91. String url = "jdbc:mysql://hadoop-senior01:3306/test";
  92. String username = "root";
  93. String password = "123456";
  94. Connection conn = null;
  95. try {
  96. // 1. 创建connection连接
  97. conn = DriverManager.getConnection(url, username, password);
  98.  
  99. // 2. 构建statement
  100. String sql = "insert into wordcount values(?,?)";
  101. PreparedStatement pstmt = conn.prepareStatement(sql);
  102.  
  103. // 3. 结果数据输出
  104. while (tuple2Iterator.hasNext()) {
  105. Tuple2<String, Integer> t2 = tuple2Iterator.next();
  106. pstmt.setString(1, t2._1());
  107. pstmt.setLong(2, t2._2());
  108.  
  109. pstmt.executeUpdate();
  110. }
  111. } finally {
  112. // 4. 关闭连接
  113. conn.close();
  114. }
  115.  
  116. }
  117. });
  118.  
  119. }
  120. }

033 Java Spark的编程的更多相关文章

  1. Spark菜鸟学习营Day1 从Java到RDD编程

    Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...

  2. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  3. 实验5 Spark SQL编程初级实践

    今天做实验[Spark SQL 编程初级实践],虽然网上有答案,但都是用scala语言写的,于是我用java语言重写实现一下. 1 .Spark SQL 基本操作将下列 JSON 格式数据复制到 Li ...

  4. <译>Spark Sreaming 编程指南

    Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...

  5. 03、IDEA下Spark API编程

    03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...

  6. 实验 5 Spark SQL 编程初级实践

    实验 5  Spark SQL 编程初级实践    参考厦门大学林子雨 1. Spark SQL 基本操作 将下列 json 数据复制到你的 ubuntu 系统/usr/local/spark 下,并 ...

  7. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  8. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  9. 1.JAVA之GUI编程概述

          下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式:                             ...

随机推荐

  1. 安利一个很火的 Github 滤镜项目

    安利一个很火的 Github 滤镜项目 园长 1 个月前 简评:通过深度学习,一秒钟让你的照片高大上,这是康奈尔大学和 Adobe 的工程师合作的一个新项目,通过卷积神经网络把图片进行风格迁移.项目已 ...

  2. dp乱写3:环形区间dp(数字游戏)

    状态: fmax[i,j]//表示前i个数分成j个部分的最大值 fmin[i,j]//表示前i个数分成j个部分的最小值 边界:fmax[i,1]:=(sum[i] mod 10+10) mod 10( ...

  3. [学习笔记]Cayley-Hilmiton

    Cayley–Hamilton theorem - Wikipedia 其实不是理解很透彻,,,先写上 简而言之: 是一个知道递推式,快速求第n项的方法 k比较小的时候可以用矩阵乘法 k是2000,n ...

  4. web开发中的跨域整理

    1.springboot通过CROS实现跨域: https://www.cnblogs.com/520playboy/p/7306008.html springboot下各种跨域方式: http:// ...

  5. RabbitMQ之集群搭建

    1.RabbitMQ集群模式RabbitMQ集群中节点包括内存节点(RAM).磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点. 2.普通模式(默认)        对于普通模式,集群中 ...

  6. SQL语句(十一)函数查询

    (十一)函数查询 1. 聚合函数 对一组值进行计算,得到一个返回值 SUM(), 求和 AVG(), 求平均 MIN(), 求最小 MAX(), 求最大 COUNT(), 计数,即个数 --例1 求所 ...

  7. 阿里云(一)云存储OSS的命令行osscmd的安装和使用

    一.安装Python 在Linux Shell里验证Python版本: $ python -V Python 2.7.10 二.安装OSScmd SDK osscmd是基于python 2.5.4(其 ...

  8. 网络_OSI模型_数据包传输

    2017年1月12日, 星期四 网络_OSI模型_数据包传输 1.  网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层:       应用层     ...

  9. OnContextMenu事件(转)

    用oncontextmenu事件单禁用右键菜单 一个页面中,BODY中用oncontextmenu='return false'来取消鼠标右键:在JS中设置oncontextmenu='return ...

  10. 【转】如何评价 Apple 新推出的编程语言 Swift?

    如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它.   ...