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. hadoop2相对hadoop1有非常重大的改进

    hadoop2相对hadoop1有非常重大的改进. 下面看一下在HDFS和MapReduce方面的改进: HDFS Federation(HDFS联邦)federation-background[1] ...

  2. 【BZOJ1082】[SCOI2005]栅栏(搜索)

    [BZOJ1082][SCOI2005]栅栏(搜索) 题面 BZOJ 洛谷 题解 随便写个爆搜,洛谷上就\(80\)分了.先放爆搜代码: #include<iostream> #inclu ...

  3. 在Mac上快速Kill掉Tomcat

    最近IDEA总是会莫名其妙的挂掉,而挂掉之后通过IDEA开启的Tomcat却没有同步给关掉,等我再在IDEA里要启动的时候,就不行了.... 这时,就需要手动去kill掉tomcat,每次先 ps - ...

  4. 标记,上传并下载自己创建的镜像 image

    1. 首先使用 docker images 查看已有镜像: 2. 获得 docker-whale 的 IMAGE ID,然后为 docker-whale 镜像 image 打上标签 Tag.使用命令: ...

  5. CodeSmith自己动手写模板

    CodeSmith学习笔记------ 1.新建一个Code Smith Generator Template(C sharp) 2.一些常见标签的解释: ①外部变量: <%@ Property ...

  6. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

  7. 个推基于Consul的配置管理

    作者:个推应用平台基础架构高级研发工程师 阿飞 在微服务架构体系中,由于微服务众多,服务之间又有互相调用关系,因此,一个通用的分布式配置管理是必不可少的.一般来说,配置管理需要解决配置集中管理.在系统 ...

  8. P2073 送花

    P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...

  9. 函数和常用模块【day06】:shutil模块(四)

    本节内容 简书 模块详解 压缩解压 一.简述 我们在日常处理文件时,经常用到os模块,但是有的时候你会发现,像拷贝.删除.打包.压缩等文件操作,在os模块中没有对应的函数去操作,下面我们就来讲讲高级的 ...

  10. linux下c语言实现双进程运行

    题目 编写一个Linux C程序,在主进程中创建一个子进程,子进程中死循环输出“Hello CSU”字符串,主进程休眠10s后,向子进程发送信号结束子进程,随后主进程退出.(用信号实现进程间的通信,k ...