Spark scala和java的api使用
1、利用scala语言开发spark的worcount程序(本地运行)
package com.zy.spark import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} //todo:利用scala语言来实现spark的wordcount程序
object WordCount {
def main(args: Array[String]): Unit = {
//1、创建SparkConf对象,设置appName和master local[2]表示本地采用2个线程去运行任务
val sparkConf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local[2]") //2、创建SparkContext 该对象是所有spark程序的执行入口,它会创建DAGScheduler和TaskScheduler
val sc = new SparkContext(sparkConf) //设置日志输出级别
sc.setLogLevel("warn") //3、读取数据文件
val data: RDD[String] = sc.textFile("D:\\words.txt") //4、切分每一行获取所有单词
val words: RDD[String] = data.flatMap(_.split(" ")) //5、每个单词计为1
val wordAndOne: RDD[(String, Int)] = words.map((_, 1)) //6、相同单词出现的所有的1累加
val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_ + _) //按照单词出现的次数降序排列
val sortRDD: RDD[(String, Int)] = result.sortBy(x => x._2, false) //7、收集数据,打印输出
val finalResult: Array[(String, Int)] = sortRDD.collect()
finalResult.foreach(println) //8、关闭sc
sc.stop()
}
}
2、利用scala语言开发spark的wordcount程序(集群运行)
package com.zy.spark import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD //todo:利用scala语言开发spark的wordcount程序(集群运行)
object WordCount_Online {
def main(args: Array[String]): Unit = {
//1、创建SparkConf对象,设置appName
val sparkConf: SparkConf = new SparkConf().setAppName("WordCount_Online") //2、创建SparkContext 该对象是所有spark程序的执行入口,它会创建DAGScheduler和TaskScheduler
val sc = new SparkContext(sparkConf) //设置日志输出级别
sc.setLogLevel("warn") //3、读取数据文件 args(0)为文件地址参数
val data: RDD[String] = sc.textFile(args(0)) //4、切分每一行获取所有单词
val words: RDD[String] = data.flatMap(_.split(" ")) //5、每个单词计为1
val wordAndOne: RDD[(String, Int)] = words.map((_, 1)) //6、相同单词出现的所有的1累加
val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_ + _) //7、把结果数据保存到hdfs上 args(1)是保存到hdfs的目录参数
result.saveAsTextFile(args(1)) //8、关闭sc
sc.stop()
} }
最后打成jar包 到集群上执行
spark-submit --master spark://node1:7077 --class cn.itcast.spark.WordCount_Online --executor-memory 1g --total-executor-cores 2 original-spark_xxx-1.0-SNAPSHOT.jar /words.txt /out
3、利用java语言开发spark的wordcount程序(本地运行)
package com.zy.spark; 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 scala.Tuple2; import java.util.Arrays;
import java.util.Iterator;
import java.util.List; //todo:利用java语言开发spark的wordcount程序(本地运行)
public class WordCount_Java {
public static void main(String[] args) {
//1、创建SparkConf对象
SparkConf sparkConf = new SparkConf().setAppName("WordCount_Java").setMaster("local[2]"); //2、创建JavaSparkContext对象
JavaSparkContext jsc = new JavaSparkContext(sparkConf); //3、读取数据文件
JavaRDD<String> data = jsc.textFile("D:\\words.txt"); //4、切分每一行获取所有的单词
JavaRDD<String> words = data.flatMap(new FlatMapFunction<String, String>() {
public Iterator<String> call(String line) throws Exception {
String[] words = line.split(" ");
return Arrays.asList(words).iterator();
}
}); //5、每个单词计为1
JavaPairRDD<String, Integer> wordAndOne = words.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, 1);
}
}); //6、相同单词出现1累加
JavaPairRDD<String, Integer> result = wordAndOne.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
}); //按照单词出现的次数降序排列 (单词,次数)------>(次数,单词).sortByKey------->(单词,次数) JavaPairRDD<Integer, String> reverseRDD = result.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() {
public Tuple2<Integer, String> call(Tuple2<String, Integer> t) throws Exception {
return new Tuple2<Integer, String>(t._2, t._1);
}
}); JavaPairRDD<String, Integer> sortedRDD = reverseRDD.sortByKey(false).mapToPair(new PairFunction<Tuple2<Integer, String>, String, Integer>() {
public Tuple2<String, Integer> call(Tuple2<Integer, String> t) throws Exception {
return new Tuple2<String, Integer>(t._2, t._1);
}
}); //7、收集数据打印输出
List<Tuple2<String, Integer>> finalResult = sortedRDD.collect();
for (Tuple2<String, Integer> tuple : finalResult) {
System.out.println("单词:" + tuple._1 + " 次数:" + tuple._2);
} //8、关闭jsc
jsc.stop();
}
}
Spark scala和java的api使用的更多相关文章
- Spark:用Scala和Java实现WordCount
http://www.cnblogs.com/byrhuangqiang/p/4017725.html 为了在IDEA中编写scala,今天安装配置学习了IDEA集成开发环境.IDEA确实很优秀,学会 ...
- 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]
编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...
- UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现
UserView--第二种方式(避免第一种方式Set饱和),基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import ...
- UserView--第一种方式set去重,基于Spark算子的java代码实现
UserView--第一种方式set去重,基于Spark算子的java代码实现 测试数据 java代码 package com.hzf.spark.study; import java.util.Ha ...
- Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset
Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要 ...
- Scala IDEA for Eclipse里用maven来创建scala和java项目代码环境(图文详解)
这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群模式) ...
- 用maven来创建scala和java项目代码环境(图文详解)(Intellij IDEA(Ultimate版本)、Intellij IDEA(Community版本)和Scala IDEA for Eclipse皆适用)(博主推荐)
不多说,直接上干货! 为什么要写这篇博客? 首先,对于spark项目,强烈建议搭建,用Intellij IDEA(Ultimate版本),如果你还有另所爱好尝试Scala IDEA for Eclip ...
- 三、使用maven创建scala工程(scala和java混一起)
本文先叙述如何配置eclipse中maven+scala的开发环境,之后,叙述如何实现spark的本地运行.最后,成功运行scala编写的spark程序. 刚开始我的eclipse+maven环境是配 ...
- Scala For Java的一些参考
变量 String yourPast = "Good Java Programmer"; val yourPast : String = "Good Java ...
随机推荐
- 【DUBBO】Dubbo:monitor的配置
[一]:配置项 <dubbo:monitor protocol="registry"/> [二]:配置解析器-->具体解析器为com.alibaba.dubbo. ...
- FastAdmin env.sample 的用法
FastAdmin env.sample 的用法 在 FastAdmin 的 1.0.0.20180513 中我提交了一个 PR,增加 env.sample 内容如下: [app] debug = f ...
- SharePoint2013 Online中InfoPath 无法调用WebService
传说微软office365中国区服务器已经迁移到国内,试了下速度果然比之前快了很多,不过随后测试了个简单的功能,还是直接被打击了. 准备在online版本中做一个简单的报销流程测试测试,于是先用Inf ...
- 移动端固定头部和固定左边第一列的实现方案(Vue中实现demo)
最近移动端做一份报表,需要左右滚动时,固定左边部分:上下滚动时,固定头部部分. 代码在Vue中简单实现 主要思路是: a.左边部分滚动,实时修改右边部分的滚动条高度 b.头部和内容部分都设置固定高度, ...
- debian下qt4动态编译
一句话不割,版本4.86 ./configure -prefix /home/用户名/Qt/dynamic -opensource -opengl -confirm-license -no-scrip ...
- jq下拉插件,chosen
Chosen 选项列表 <select data-placeholder="请选择" class="chosen-select" tabindex=&qu ...
- 使用BeanShell 对比取出来的值
描述: 使用BeanShell 对比取出来的值,如不一致,报错 步骤一: 使用json Extractor后置处理器,取出"登入成功" 使用BeanS hell断言: 语法: if ...
- Java-Runoob-面向对象:Java 抽象类
ylbtech-Java-Runoob-面向对象:Java 抽象类 1.返回顶部 1. Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- 杂项:HTML5-3/3-技术要点
ylbtech-杂项:HTML5-3/3-技术要点 1.返回顶部 1. 重要标记 <video>标记 定义和用法: </video> 标签定义视频,比如电影片段或其他视频流 ...
- java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的. 首先,当代码编写完成之后, ...