第10课:底实战详解使用Java开发Spark程序学习笔记(二)
来源:互联网 发布:119手游网 92kaifa源码 编辑:程序博客网 时间:2024/06/07 00:04
http://maven.outofmemory.cn/org.apache.spark,这个网站提供了Spark core、Spark Streaming使用Maven时如何配置。
7.编写如下代码后点击右键run as -> java application,就可以运行了。
package com.dt.spark.SparkApps.cores;
import java.util.Arrays;
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;
/**
* 使用Java的方式开发进行本地测试Spark的WordCount程序
* @author DT大数据梦工厂
* http://weibo.com/ilovepains
*/
public class WordCount {
public static void main(String[] args) {
/**
* 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息,
* 例如说通过setMaster来设置程序要链接的Spark集群的Master的URL,如果设置
* 为local,则代表Spark程序在本地运行,特别适合于机器配置条件非常差(例如
* 只有1G的内存)的初学者 *
*/
SparkConf conf = new SparkConf().setAppName("Spark WordCount written by Java").setMaster("local");
/**
* 第2步:创建SparkContext对象
* SparkContext是Spark程序所有功能的唯一入口,无论是采用Scala、Java、Python、R等都必须有一个SparkContext(不同的语言具体的类名称不同,如果是Java的话则为JavaSparkContext)
* SparkContext核心作用:初始化Spark应用程序运行所需要的核心组件,包括DAGScheduler、TaskScheduler、SchedulerBackend
* 同时还会负责Spark程序往Master注册程序等
* SparkContext是整个Spark应用程序中最为至关重要的一个对象
*/
JavaSparkContext sc = new JavaSparkContext(conf); //其底层实际上就是Scala的SparkContext
/**
* 第3步:根据具体的数据来源(HDFS、HBase、Local FS、DB、S3等)通过JavaSparkContext来创建JavaRDD
* JavaRDD的创建基本有三种方式:根据外部的数据来源(例如HDFS)、根据Scala集合、由其它的RDD操作
* 数据会被RDD划分成为一系列的Partitions,分配到每个Partition的数据属于一个Task的处理范畴
* 注意:文件路径不能直接用Windows路径中的反斜扛\,要改成Linux下的斜扛/
*/
JavaRDD<String> lines = sc.textFile("D:/programFiles/spark-1.6.0-bin-hadoop2.6/README.md");
/**
* 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.1步:讲每一行的字符串拆分成单个的单词
*/
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { //如果是Scala,由于SAM转换,所以可以写成val words = lines.flatMap { line => line.split(" ")}
@Override
public Iterable<String> call(String line) throws Exception {
return Arrays.asList(line.split(" "));
}
});
/**
* 第4步:对初始的JavaRDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.2步:在单词拆分的基础上对每个单词实例计数为1,也就是word => (word, 1)
*/
JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, 1);
}
});
/**
* 第4步:对初始的RDD进行Transformation级别的处理,例如map、filter等高阶函数等的编程,来进行具体的数据计算
* 第4.3步:在每个单词实例计数为1基础之上统计每个单词在文件中出现的总次数
*/
JavaPairRDD<String, Integer> wordsCount = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() { //对相同的Key,进行Value的累计(包括Local和Reducer级别同时Reduce)
@Override
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
wordsCount.foreach(new VoidFunction<Tuple2<String,Integer>>() {
@Override
public void call(Tuple2<String, Integer> pairs) throws Exception {
System.out.println(pairs._1 + " : " + pairs._2);
}
});
sc.close();
}
}
以上内容是王家林老师DT大数据梦工厂《 IMF传奇行动》第10课的学习笔记。
王家林:Spark、Flink、Docker、Android技术中国区布道师。Spark亚太研究院院长和首席专家,DT大数据梦工厂创始人,Android软硬整合源码级专家,英语发音魔术师,健身狂热爱好者。
微信公众账号:DT_Spark
联系邮箱18610086859@126.com
电话:18610086859
QQ:1740415547
微信号:18610086859
新浪微博:ilovepains
- 第10课:底实战详解使用Java开发Spark程序学习笔记(二)
- 第10课:底实战详解使用Java开发Spark程序学习笔记
- 3000门徒内部训练绝密视频(泄密版)第10课:彻底实战详解使用Java开发Spark程序
- DT_大数据梦工厂 第8课 彻底实战详解使用IDE开发Spark程序
- 第8课:彻底实战详解使用IDE开发Spark程序
- 第8课:彻底实战详解使用IDE开发Spark程序
- 第8课:彻底实战详解使用IDE开发Spark程序--集群模式运行
- 第8课:彻底实战详解使用IDE开发Spark程序
- 3000门徒内部训练绝密视频(泄密版)第8课:彻底实战详解使用IDE开发Spark程序
- Spark学习(二):使用Spark开发wordcount程序
- 3000门徒内部训练绝密视频(泄密版)第9课:彻底实战详解使用IntelliJ IDEA下的Spark程序开发
- 第58课:使用Java和Scala在IDE中开发DataFrame实战学习笔记
- 第58课:使用Java和Scala在IDE中开发DataFrame实战学习笔记
- 第十课 使用java开发spark 实战
- 使用java开发spark实战
- 使用java开发spark 实战
- 第83讲:Scala和Java二种方式实战Spark Streaming开发
- IMF传奇行动第83课:Spark Streaming第二课:用Scala和Java二种方式实战Spark Streaming开发
- Android WebView开发问题及优化汇总
- javascript--解除事件绑定
- LeetCode题解:Remove Element
- Static Class及静态内部类和非静态内部类的不同
- 调用另一个Activity(Intent的使用)
- 第10课:底实战详解使用Java开发Spark程序学习笔记(二)
- java练习2:去除容器(ArrayList)中重复的元素
- 华为离职副总裁徐家骏的工作感悟
- leetcode 204: Count Primes
- XFire+Spring整合构建Web Service的框架搭建实例代码下载
- 跟我学分布式事务之2PC和3PC
- Android应用性能优化
- Hadoop 1.x 伪分布式环境测试
- 在非ViewController中显示AlertController的方法