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. 【BZOJ1414】[ZJOI2009]对称的正方形(哈希)

    [BZOJ1414][ZJOI2009]对称的正方形(哈希) 题面 BZOJ 洛谷 题解 深思熟虑一波,发现一个矩阵如果左右对称的话,那么它每行都是一个回文串,同理,如果上下对称的话,那么每列都是一个 ...

  2. bzoj4458 GTY的OJ (优先队列+倍增)

    把超级钢琴放到了树上. 这次不用主席树了..本来以为会好写一点没想到细节更多(其实是树上细节多) 为了方便,对每个点把他的那个L,R区间转化成两个深度a,b,表示从[a,b)选一个最小的前缀和(到根的 ...

  3. 【bzoj3992】 SDOI2015—序列统计

    http://www.lydsy.com/JudgeOnline/problem.php?id=3992 (题目链接) 题意 集合${S}$中有若干个不超过${m}$的非负整数,问由这些数组成一个长度 ...

  4. python的WSGI接口

    WSGI:Web Server Gateway Interface. WSGI是为python语言定义的web服务器和web应用程序或框架之间的一种简单而实用的接口.wsgi是一个web组件的接口规范 ...

  5. eos交易同步过程和区块生产过程源码分析

    交易同步过程 1 通过命令cleos调用 cleos transfer ${from_account} ${to_account} ${quantity} 发起交易2 eos调用chain_plugi ...

  6. python数字前自动补零

    >>> '%d' % 23 #输出23 ' >>> '%5d' % 23 #输出的数字前有3个空位,共占5个字符 ' >>> '%05d' % 2 ...

  7. Hadoop基础-MapReduce的工作原理第二弹

    Hadoop基础-MapReduce的工作原理第二弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Split(切片)  1>.MapReduce处理的单位(切片) 想必 ...

  8. Spark记录-Scala模式匹配

    Scala模式匹配 模式匹配是Scala函数值和闭包后第二大应用功能.Scala为模式匹配提供了极大的支持,处理消息. 模式匹配包括一系列备选项,每个替代项以关键字大小写为单位.每个替代方案包括一个模 ...

  9. jquery的json对象与字符串之间转换

    json对象----- >>字符串 JSON.stringify(obj) json字符串------>>json对象 JSON.parse(string) 公众号 欢迎关注我 ...

  10. java.uti.Random类nextInt方法中随机数种子为47的奇怪问题

    一,问题描述 需要生成一个[0,1]的随机数.即随机生成 0 或者 1.使用java.util.Random类的 nextInt(int)方法,当构造Random类的对象并提供随机数种子时,发现了一个 ...