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 ...
随机推荐
- gradle 插件
1. 系统内置插件的应用 a. 二进制 apply plugin :"pluginname" 比如: java b. 脚本插件 apply from : "version ...
- kong k8s 安装 以及可视化管理界面
1. git clone $ git clone git@github.com:Mashape/kong-dist-kubernetes.git $ cd kong-dist-kubernetes ...
- virtual之虚函数,虚继承
当类中包含虚函数时,则该类每个对象中在内存分配中除去数据外还包含了一个虚函数表指针(vfptr),指向虚函数表(vftable),虚函数表中存放了该类包含的虚函数的地址. 当子类通过虚继承的方式从父类 ...
- 轻量级封装DbUtils&Mybatis之四MyBatis主键
MyBatis主键 不支持对象列表存储时对自增id字段的赋值(至少包括3.2.6和3.3.0版本),如果id不是采用底层DB自增主键赋值,不必考虑此问题 温馨提示:分布式DB环境下,DB主键一般会采用 ...
- 1-3 superset数据模型
在models.py中大部分的class对应数据库中的表,那么我们就从AuditMixinNullable这个类开始我们的模型解析. AuditMixin:这个类是FAB(Flask AppBuil ...
- IIS注册Framework4.0
打开iis,确认一下framework4.0是否已经安装. 开始->控制面板->管理工具->Internet信息服务->应用程序池(左边栏)->观察右边主界面.net f ...
- cowboy的路由方式
直接贴代码 route_helper.erl -module(route_helper). -export([get_routes/]). get_routes() -> [ {'_', [ % ...
- linux文本处理命令 一
1,cut 主要的用途在于将同一行里面的数据进行分解 cut -d ‘分隔符’ -f ‘第几段’ 和-f同时使用 -c 字符区间 截取字符区间 2,grep cut 是在一行讯息当 ...
- js实现定时调用的函数setInterval()
setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭 定义 ...
- python的数据类型,数字,布尔,字符串
1.数字 数字过大,类型会自动变化,这个变化是python2特有的,在python3里都是int,不区分int和long float(浮点型),也就是小数 complex(复数) 2.布尔值 真或者假 ...