033 Java Spark的编程
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的编程的更多相关文章
- Spark菜鸟学习营Day1 从Java到RDD编程
Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- 实验5 Spark SQL编程初级实践
今天做实验[Spark SQL 编程初级实践],虽然网上有答案,但都是用scala语言写的,于是我用java语言重写实现一下. 1 .Spark SQL 基本操作将下列 JSON 格式数据复制到 Li ...
- <译>Spark Sreaming 编程指南
Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...
- 03、IDEA下Spark API编程
03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...
- 实验 5 Spark SQL 编程初级实践
实验 5 Spark SQL 编程初级实践 参考厦门大学林子雨 1. Spark SQL 基本操作 将下列 json 数据复制到你的 ubuntu 系统/usr/local/spark 下,并 ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
- 1.JAVA之GUI编程概述
下列内容为本人看毕向东老师java视频教程学习笔记! JAVA GUI图形用户界面编程: Windows 操作系统提供两种操作方式: ...
随机推荐
- 安利一个很火的 Github 滤镜项目
安利一个很火的 Github 滤镜项目 园长 1 个月前 简评:通过深度学习,一秒钟让你的照片高大上,这是康奈尔大学和 Adobe 的工程师合作的一个新项目,通过卷积神经网络把图片进行风格迁移.项目已 ...
- dp乱写3:环形区间dp(数字游戏)
状态: fmax[i,j]//表示前i个数分成j个部分的最大值 fmin[i,j]//表示前i个数分成j个部分的最小值 边界:fmax[i,1]:=(sum[i] mod 10+10) mod 10( ...
- [学习笔记]Cayley-Hilmiton
Cayley–Hamilton theorem - Wikipedia 其实不是理解很透彻,,,先写上 简而言之: 是一个知道递推式,快速求第n项的方法 k比较小的时候可以用矩阵乘法 k是2000,n ...
- web开发中的跨域整理
1.springboot通过CROS实现跨域: https://www.cnblogs.com/520playboy/p/7306008.html springboot下各种跨域方式: http:// ...
- RabbitMQ之集群搭建
1.RabbitMQ集群模式RabbitMQ集群中节点包括内存节点(RAM).磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点. 2.普通模式(默认) 对于普通模式,集群中 ...
- SQL语句(十一)函数查询
(十一)函数查询 1. 聚合函数 对一组值进行计算,得到一个返回值 SUM(), 求和 AVG(), 求平均 MIN(), 求最小 MAX(), 求最大 COUNT(), 计数,即个数 --例1 求所 ...
- 阿里云(一)云存储OSS的命令行osscmd的安装和使用
一.安装Python 在Linux Shell里验证Python版本: $ python -V Python 2.7.10 二.安装OSScmd SDK osscmd是基于python 2.5.4(其 ...
- 网络_OSI模型_数据包传输
2017年1月12日, 星期四 网络_OSI模型_数据包传输 1. 网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层: 应用层 ...
- OnContextMenu事件(转)
用oncontextmenu事件单禁用右键菜单 一个页面中,BODY中用oncontextmenu='return false'来取消鼠标右键:在JS中设置oncontextmenu='return ...
- 【转】如何评价 Apple 新推出的编程语言 Swift?
如何评价 Apple 新推出的编程语言 Swift? 原文地址:http://www.zhihu.com/question/24002984 评价:如果你会Objective-C,你不需要去看它. ...