1.Java SparkCore编程

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

2.前提

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

3.程序  

 package com.ibeifeng.senior;

 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.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Arrays;
import java.util.Iterator; /**
* Java实现Spark的WordCount程序
* Created by ibf on 02/15.
*/
public class JavaWordCountSparkCore {
public static void main(String[] args) {
String resultHDFSSavePath = "/beifeng/spark/result/wordcount/" + System.currentTimeMillis();
// 1. 创建SparkConf配置信息
SparkConf conf = new SparkConf()
.setMaster("local[*]")
.setAppName("spark-wordcount"); // 2. 创建SparkContext对象,在java编程中,该对象叫做JavaSparkContext
JavaSparkContext sc = new JavaSparkContext(conf); // 3. 从hdfs读取文件形成RDD
// TODO: 文件路径自行给定
JavaRDD<String> rdd = sc.textFile("/hive/common.db/dept"); // 4. RDD数据处理
// TODO: 过滤特殊字符
// 4.1 行数据的分割,调用flatMap函数
JavaRDD<String> wordRDD = rdd.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterable<String> call(String s) throws Exception {
String line = s;
if (line == null) line = "";
String[] arr = line.split("\t");
return Arrays.asList(arr);
}
}); // 4.2 将数据转换为key/value键值对
/**
* RDD的reduceByKey函数不是RDD类中,通过隐式转换后,存在于其他类中<br/>
* Java由于不存在隐式转换,所以不能直接调用map函数进行key/value键值对转换操作,必须调用特定的函数
* */
JavaPairRDD<String, Integer> wordCountRDD = wordRDD.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s, 1);
}
}); // 4.3 聚合结果
JavaPairRDD<String, Integer> resultRDD = wordCountRDD.reduceByKey(new Function2<Integer, Integer, Integer>() { @Override
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
}); // 5. 结果输出
// 5.1 结果输出到HDFS
resultRDD.saveAsTextFile(resultHDFSSavePath);
// 5.2 结果输出到MySQL
/**
* SparkCore RDD数据的读入是通过InputFormat来读入数据形成RDD的
* sc.newAPIHadoopRDD[K, V, F <: NewInputFormat[K, V]](
conf: Configuration,
fClass: Class[F],
kClass: Class[K],
vClass: Class[V])
* RDD的saveASxxxx相关方法是利用OutputFormat来进行数据输出的
* resultRDD.saveAsNewAPIHadoopDataset(conf: Configuration);
*/
resultRDD.foreachPartition(new VoidFunction<java.util.Iterator<Tuple2<String, Integer>>>() { @Override
public void call(Iterator<Tuple2<String, Integer>> tuple2Iterator) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://hadoop-senior01:3306/test";
String username = "root";
String password = "123456";
Connection conn = null;
try {
// 1. 创建connection连接
conn = DriverManager.getConnection(url, username, password); // 2. 构建statement
String sql = "insert into wordcount values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql); // 3. 结果数据输出
while (tuple2Iterator.hasNext()) {
Tuple2<String, Integer> t2 = tuple2Iterator.next();
pstmt.setString(1, t2._1());
pstmt.setLong(2, t2._2()); pstmt.executeUpdate();
}
} finally {
// 4. 关闭连接
conn.close();
} }
}); }
}

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. 【arc074e】RGB Sequence(动态规划)

    [arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...

  2. 【转】汽车CAN总线

    概述 CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而 ...

  3. USACO Section 2.1 Sorting a Three-Valued Sequence 解题报告

    题目 题目描述 给N个整数,每个整数只能是1,2,或3.现在需要对这个整数序列进行从小到大排序,问最少需要进行几次交换.N(1 <= N <= 1000) 样例输入 9 2 2 1 3 3 ...

  4. Hello,Power BI

    Power BI 是什么 Power BI 是一套业务分析工具,用于分析数据和理解数据,快速便捷地监控数据变化,为商务决策提供依据. Power BI 有用户组的概念.分享权限等概念 Power BI ...

  5. 【codevs4696】等差数列

    题目大意:给定 N 个整数组成的集合,向集合中添加一个整数,使得这 N+1 个整数组成等差数列,求这样的整数有多少个. 题解: 引理1:若原集合中只有一个元素,则有无数种可能. 引理2:若原集合中有且 ...

  6. jsp中的EL和JSTL的关系

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  7. 函数和常用模块【day06】:time模块 (一)

    本节内容 1.简述 2.time模块 3.时间格式转换 一.简述 我们在写代码的过程经常遇到时间模块,如果我们以后需要根据时间去筛选信息的话,那用户会更大,所以今天就来讲讲时间的两大模块:time & ...

  8. Kafka 0.8 宕机问题排查步骤

    CPU 利用率高的排查方法 看看该机器的连接数是不是比其他机器多,监听的端口数:netstat -anlp | wc -l Kafka-0.8的停止和启动 启动: cd /usr/local/kafk ...

  9. MongoDB 聚合嵌入的数组(扁平化数据+管道)

    MongoDB学习教程 先看下要操作的主要数据结构: { "_id" : "000015e0-3e9c-40b3-bd0d-6e7949f455c0", &qu ...

  10. javascript柯里化

    function curry(fn){ var slice = Array.prototype.slice; var arr = slice.call(arguments,1); return fun ...