好程序员大数据教程:SparkShell和IDEA中编写Spark程序,spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下用Scala编写Spark程序。spark-shell程序一般用作Spark程序测试练习来用。spark-shell属于Spark的特殊应用程序,我们可以在这个特殊的应用程序中提交应用程序

spark-shell启动有两种模式,local模式和cluster模式,分别为

local模式:

spark-shell

local模式仅在本机启动一个SparkSubmit进程,没有与集群建立联系,虽然进程中有SparkSubmit但是不会被提交到集群红

Cluster模式(集群模式):

spark-shell \
--master spark://hadoop01:7077 \
--executor-memory 512m \
--total-executor-cores 1

后两个命令不是必须的 --master这条命令是必须的(除非在jar包中已经指可以不指定,不然就必须指定)

退出shell

千万不要ctrl+c spark-shell 正确退出 :quit 千万不要ctrl+c退出 这样是错误的 若使用了ctrl+c退出 使用命令查看监听端口 netstat - apn | grep 4040 在使用kill -9 端口号 杀死即可

3.25.11 spark2.2shell和spark1.6shell对比

ps:启动spark-shell若是集群模式,在webUI会有一个一直执行的任务

通过IDEA创建Spark工程

ps:工程创建之前步骤省略,在scala中已经讲解,直接默认是创建好工程的

对工程中的pom.xml文件配置

<!-- 声明公有的属性 -->

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.11.8</scala.version>
<spark.version>2.2.0</spark.version>
<hadoop.version>2.7.1</hadoop.version>
<scala.compat.version>2.11</scala.compat.version>
</properties>

<!-- 声明并引入公有的依赖 -->

<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>

Spark实现WordCount程序

Scala版本
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object SparkWordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("dri/wordcount").setMaster("local[*]")

//创建sparkContext对象

val sc = new SparkContext(conf)

//通过sparkcontext对象就可以处理数据
//读取文件 参数是一个String类型的字符串 传入的是路径

val lines: RDD[String] = sc.textFile(“dir/wordcount”)

//切分数据

val words: RDD[String] = lines.flatMap(_.split(" "))

//将每一个单词生成元组 (单词,1)

val tuples: RDD[(String, Int)] = words.map((_,1))

//spark中提供一个算子 reduceByKey 相同key 为一组进行求和 计算value

val sumed: RDD[(String, Int)] = tuples.reduceByKey(_+_)

//对当前这个结果进行排序 sortBy 和scala中sotrBy是不一样的 多了一个参数
//默认是升序 false就是降序

val sorted: RDD[(String, Int)] = sumed.sortBy(_._2,false)

//将数据提交到集群存储 无法返回值

sorted.foreach(println)

//回收资源停止sc,结束任务

sc.stop()
}
}

Java版本

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;
public class JavaWordCount {
public static void main(String[] args) {

//1.先创建conf对象进行配置主要是设置名称,为了设置运行模式

SparkConf conf = new SparkConf().setAppName("JavaWordCount").setMaster("local");

//2.创建context对象

JavaSparkContext jsc = new JavaSparkContext(conf);
JavaRDD<String> lines = jsc.textFile("dir/file");

//进行切分数据 flatMapFunction是具体实现类

JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) throws Exception {
List<String> splited = Arrays.asList(s.split(" "));
return splited.iterator();
}

});

//将数据生成元组
//第一个泛型是输入的数据类型 后两个参数是输出参数元组的数据
JavaPairRDD<String, Integer> tuples = words.mapToPair(new PairFunction<String, String,Integer>() {@Overridepublic Tuple2<String, Integer> call(String s) throws Exception {return new Tuple2<String, Integer>(s, 1);}});复制代码
//聚合
JavaPairRDD<String, Integer> sumed = tuples.reduceByKey(new Function2<Integer, Integer,Integer>() {复制代码

@Override

//第一个Integer是相同key对应的value
//第二个Integer是相同key 对应的value
public Integer call(Integer v1, Integer v2) throws Exception {return v1 + v2;}});复制代码
//因为Java api没有提供sortBy算子,此时需要将元组中的数据进行位置调换,然后在排序,排完序在换回
//第一次交换是为了排序
JavaPairRDD<Integer, String> swaped = sumed.mapToPair(new PairFunction<Tuple2<String,Integer>, Integer, String>() {@Overridepublic Tuple2<Integer, String> call(Tuple2<String, Integer> tup) throws Exception {return tup.swap();}});复制代码
//排序
JavaPairRDD<Integer, String> sorted = swaped.sortByKey(false);复制代码
//第二次交换是为了最终结果 <单词,数量>
JavaPairRDD<String, Integer> res = sorted.mapToPair(new PairFunction<Tuple2<Integer,String>, String, Integer>() {@Overridepublic Tuple2<String, Integer> call(Tuple2<Integer, String> tuple2) throws Exception{return tuple2.swap();}});System.out.println(res.collect());res.saveAsTextFile("out1");jsc.stop();}
}复制代码

好程序员大数据教程:SparkShell和IDEA中编写Spark程序相关推荐

  1. 好程序员大数据教程分享之Hadoop优缺点

    好程序员大数据教程分享之Hadoop优缺点,大数据成为时代主流,开启时代的大门,全球43亿部电话.20亿位互联网用户每秒都在不断地产生大量数据,人们发送短信给朋友.上传视频.用手机拍照.更新社交网站的 ...

  2. 好程序员大数据教程分享超详细大数据学习路线

    随着信息产业的迅猛发展,大数据应用逐渐落地,行业人才需求量逐年扩大.大数据成为目前最具前景的高薪行业之一,大数据分析工程师.大数据开发工程师等大数据人才也成为市场紧缺型人才,薪资一涨再涨. 很多人想要 ...

  3. 好程序员大数据技术分享:Zookeeper集群管理与选举

    为什么80%的码农都做不了架构师?>>>    大数据技术的学习,逐渐成为很多程序员的必修课,因为趋势也是因为自己的职业生涯.在各个技术社区分享交流成为很多人学习的方式,今天很荣幸找 ...

  4. 好程序员大数据笔记之:Hadoop集群搭建

    好程序员大数据笔记之:Hadoop集群搭建在学习大数据的过程中,我们接触了很多关于Hadoop的理论和操作性的知识点,尤其在近期学习的Hadoop集群的搭建问题上,小细节,小难点拼频频出现,所以,今天 ...

  5. 试图加载格式不正确的程序_好程序员大数据学习路线之hive存储格式

    好程序员大数据学习路线之hive存储格式,hive的存储格式通常是三种:textfile . sequencefile . rcfile . orc .自定义 set hive.default.fil ...

  6. 商业方向的大数据专业_好程序员大数据培训分享大数据就业方向有哪些

    好程序员大数据培训分享大数据就业方向有哪些?看到了大数据的就业前景及就业薪资,相信很多人都对大数据技术跃跃欲试,想要学习大数据技术.小编认为在学习大数据之前,你还需要了解一下大数据的就业方向有哪些?毕 ...

  7. 好程序员大数据培训分享大数据概述

    好程序员大数据培训分享大数据概述一,大数据时代的悄然来临,让信息技术的发展发生了巨大变化,并深刻影响着社会生产和人民生活的方方面面.每个国家都高度重视大数据技术的研究和产业发展,纷纷把大数据上升为国家 ...

  8. 深圳大数据培训:好程序员大数据学习路线之hive 存储格式

    深圳大数据培训:好程序员大数据学习路线之hive 存储格式 好程序员大数据学习路线之hive存储格式,hive的存储格式通常是三种:textfile . sequencefile . rcfile . ...

  9. 好程序员大数据培训分享怎样进行大数据入门学习

    好程序员大数据培训分享怎样进行大数据入门学习,对于大数据的入门学习,基础不一样,起点就会不一样. 今天先来说说,对于零基础的同学想要学习大数据的方式方法吧!很多人可能感到不可思议,零基础怎么可能学习大 ...

最新文章

  1. php本地安装帝国视频,帝国cms如何播放视频
  2. 【Python基础】Python爬虫的两套解析方法和四种信息提取方式
  3. 利用Excel或LibreOffice的业务输入进行单元测试约束
  4. SQL Server 2008 R2数据库镜像部署
  5. C++新特性探究(九):functor仿函数
  6. Linux操作Oracle(8)——Oracle数据库迁移全纪录(1) — 表空间 用户 权限迁移
  7. solid 设计原则 php,面向对象设计SOLID五大原则
  8. SVN安装-配置-使用及myeclipse的插件安装(图文)
  9. Base64编码解码(一)——介绍
  10. 支付宝宣布刷脸支付将全面接管扫码支付
  11. GridView commandname
  12. 清华梦的粉碎-写给清华大学的退学申请
  13. 开发者体验:如何更好的呈现错误?
  14. SQL数据库完美恢复 SQL数据库损坏修复
  15. 太阳能心率智能骑行仪(STM32)
  16. 博途数据类型wstring怎么用_在 STEP 7 (TIA 博途) 中,如何使用用户自定义数据类型 (UDT)?...
  17. html5 圆圈扩散,CSS3地图动态实例代码(圆圈向外扩散)
  18. VeLO:让AI自己调整参数的新优化器
  19. 详解HBase架构原理
  20. 成年人的100个心酸瞬间:那些看似光鲜亮丽职业的背后......

热门文章

  1. c++几种智能指针比较
  2. 贪心算法--删数问题
  3. 1.怎么判断 float a 是 0?
  4. javaweb:servlet
  5. 设计模式:单例模式之懒汉式
  6. javac,使用-d .与省略-d的区别
  7. 前端三十四:内嵌框架
  8. VBS脚本常用经典代码收集
  9. MutationObserver 监听DOM树变化
  10. JS中三目运算符和if else的区别