本文将介绍如何实际动手进行 RDD 的转换与操作,以及如何编写、编译、打包和运行 Spark 应用程序。

启动 Spark Shell

Spark 的交互式脚本是一种学习 API 的简单途径,也是分析数据集交互的有力工具。Spark 包含多种运行模式,可使用单机模式,也可以使用分布式模式。为简单起见,本节采用单机模式运行 Spark。
无论采用哪种模式,只要启动完成后,就初始化了一个 SparkContext 对象(SC),同时也创建了一个 SparkSQL 对象用于 SparkSQL 操作。进入 Scala 的交互界面中,就可以进行 RDD 的转换和行动操作。
进入目录 SPARK_HOME/bin 下,执行如下命令启动 Spark Shell。

$./spark-shell

Spark Shell 使用

假定本地文件系统中,文件 home/hadoop/SparkData/WordCount/text1 的内容如下。

hello world
hello My name is john I love Hadoop programming

下面我们基于该文件进行 Spark Shell 操作。1)利用本地文件系统的一个文本文件创建一个新 RDD。

scala>var textFile = sc.textFile("file://home/Hadoop/SparkData/WordCount/text1");
textFile:org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at
<console>:12

2)执行动作操作,计算文档中有多少行。

scala>textFile.count() //RDD中有多少行
17/05/17 22:59:07 INFO spark.SparkContext:Job finished:count at<console>:15, took 5.654325469 s
resl:Long = 2

返回结果表明文档中有“2”行。3)执行动作操作,获取文档中的第一行内容。

scala>textFile.first() // RDD 第一行的内容
17/05/17 23:01:25 INFO spark.SparkContext:Job finished:first at <console>:15,took

返回结果表明文档的第一行内容是“hello world”。4)转换操作会将一个 RDD 转换成一个新的 RDD。获取包含“hello”的行的代码如下

scala>var newRDD = textFile.filter (line => line.contains("hello")) //有多少行含有 hello
scala>newRDD.ount() // 有多少行含 hello
17/05/17 23:06:33 INFO spark.SparkContext:Job finished:count at <console>:15,took 0.867975549 s
res4:Long = 2

这段代码首先通过转换操作 filter 形成一个只包括含有“hello”的行的 RDD,然后再通过 count 计算有多少行。5)Spark Shell 的 WordCount 实现使用 sparkContext 类中的 textFile() 读取本地文件,并生成 MappedBJDD。

scala> val file = sc.textFile ("file://home/hendoop/SparkData/WordCount/text1"));
scala> val count = file.flatMap(line=>line.split("")).map(word => (word,1)).reduceByKey(_+_)
scala> count.collect()
17/05/17 23:11:46 INFO spark.SparkContext:Job finished: collect at<console>:17,
took 1.624248037 s
res5: Array[(String, Int)] = Array((hello,2),(world,1),(My,1),(is,1),(love,1),(I,1),(John,1),(hadoop,1),(name,1),(programming,1))

  • 使用 sparkContext 类中的 textFile() 读取本地文件,并生成 MappedBJDD。
  • 使用 flatMap() 方法将文件内容按照空格拆分单词,拆分形成 FlatMappedRDD。
  • 使用 map(word=>(word,1)) 将拆分的单词形成 <单词,1> 数据对,此时生成 MappedBJDD。
  • 使用 reduceByKey() 方法对单词的频度进行统计,由此生成 ShuffledRDD,并由 collect 运行作业得出结果。

编写Java应用程序

1. 安装 maven

手动安装 maven,可以访问 maven 官方下载 apache-maven-3.3.9-bin.zip。选择安装目录为 /usr/local/maven。

sudo unzip ~/下载/apache-maven-3.3.9-bin.zip -d/usr/local
cd /usr/local
sudo mv apache-maven-3.3.9/ ./maven
sudo chown -R hadoop ./maven

2. 编写 Java 应用程序代码

在终端执行以下命令创建一个文件夹 sparkapp2,作为应用程序根目录。

cd~#进入用户主文件夹
mkdir -p ./sparkapp2/src/main/java

使用 vim./sparkapp2/src/main/java/SimpleApp.java 建立一个名为 SimpleApp.java 的文件,代码如下。

/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
public class SimpleApp {public static void main(String[] args)  {String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your systemJavaSparkContext sc = new JavaSparkContext("local", "Simple App",
"file:///usr/local/spark/",new String[] {"target/simple-project-1.0.jar"});JavaRDD<String> logData = sc.textFile(logFile).cache();long numAs = logData.filter(new Function<String, Boolean>(){public Boolean call(String s) { return s.contains ("a");}}).count();long numBs = logData.filter(new Function<String,Boolean>(){public Boolean call(String s) { return s.contains("b");}}).count();System.out.printIn ("Lines with a:"+ numAs +",lines with b:"+ numBs);}
}

该程序依赖 Spark Java API,因此我们需要通过 maven 进行编译打包。在 ./sparkapp2 中新建文件 pom.xml(vim./sparkapp2/pom.xml),并声明该独立应用程序的信息及与 Spark 的依赖关系,代码如下。

<project><groupld>edu.berkeley</groupId><artifactId>simple-project</artifactId><modelVersion>4.0.0</modelVersion><name>Simple Project</name><packaging>jar</packaging><version>l.0</version><repositories><repository><id>Akka repository</id><url>http://repo.akka.io/releases</url></repository></repositories><dependencies><dependency> <!--Spark dependency --><groupId>org.apache.spark<groupId><artifactId>spark-core_2.11</artifactId><version>2.1.0</version></dependency></dependencies>
</project>

3. 使用 maven 打包 Java 程序

为了保证 maven 能够正常运行,先执行以下命令检查整个应用程序的文件结构。

cd ~/sparkapp2
find

文件结构如图 1 所示。

图 1 SimpleApp.java的文件结构

接着,可以通过以下代码将这整个应用程序打包成 Jar。

/usr/local/maven/bin/mvn package

如果运行以上命令后出现类似下面的信息,说明 Jar 包生成成功。

[INFO] ---------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ---------------------------------------------
[INFO] Total time: 6.583 s
[INFO] Finished at: 2017-02-19T15:52:08+08:00
[INFO] Final Memory: 15M/121M
[INFO]----------------------------------------------

4. 通过 spark-submit 运行程序

最后,可以将生成的 Jar 包通过 spark-submit 提交到 Spark 中运行,命令如下。

/usr/local/spark/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar

最后得到的结果如下。

Lines with a: 62,Lines with b: 30

maven依赖 spark sql_Spark开发实例相关推荐

  1. maven依赖 spark sql_使用Kafka+Spark+Cassandra构建实时处理引擎

    大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 暴走大数据点击右侧关注,暴走大数据! Apache Kafka 是一个可扩展,高性能,低延迟的平台,允许我们像消息系统一样读取和写入数据.我们 ...

  2. maven依赖 spark sql_window环境运行spark-xgboost 8.1踩到的坑

    在window 环境下使用spark - xgboost会出现一些问题,这里记录一下. 环境:window 7 + spark 2.31 + xgboost 8.1 + idea + maven 一. ...

  3. Intellij IDEA使用Maven搭建spark开发环境(scala)

    如何一步一步地在Intellij IDEA使用Maven搭建spark开发环境,并基于scala编写简单的spark中wordcount实例. 1.准备工作  首先需要在你电脑上安装jdk和scala ...

  4. Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发

    今天的你不付昨天的辛苦,今天的辛苦定会拥抱明日的幸福, 每一次的成长,都要给自己以鼓励,每一次的突破,都给自己以信心,万花丛中我不是最美,但我有我的自信 ------------送给一直努力的你 今天 ...

  5. Spark开发实例(编程实践)

    本节将介绍如何实际动手进行 RDD 的转换与操作,以及如何编写.编译.打包和运行 Spark 应用程序. 启动 Spark Shell Spark 的交互式脚本是一种学习 API 的简单途径,也是分析 ...

  6. IDEA下使用maven配置Spark开发环境

    IDEA下使用maven配置Spark开发环境 1.安装Java 2.配置环境变量 3.配置Hadoop环境 4.安装Scala插件 5.配置maven 4.Spark编程 Spark测试 使用到的软 ...

  7. 【华为云实战开发】15.Maven依赖的JAR包下载慢?赶紧看过来

    文:华为云DevCloud 亲亲土豆 相信许多JAVA开发者在日常工作中时常会碰到这种情况,那就是编译Maven工程时,工程所依赖的jar包文件下载非常慢,甚至经常出现下载不成功的问题,今天,小编就给 ...

  8. Spark 应用开发程序

    目 录 1 绪论 1 1.1 项目背景 1 1.1.1 Hadoop的发展 1 1.1.2 Spark的兴起 2 1.2 项目意义 2 2 Hadoop云计算环境的搭建 3 2.1 准备工作 3 2. ...

  9. 第9课:IDEA下的spark程序开发

    第9课:IDEA下的spark程序开发 1.下载IntelliJ IDEA: http://www.jetbrains.com/idea/ 选择社区版,要在centos上安装,需要下载.TARGZ,解 ...

最新文章

  1. java 异常的分类并举例_Java异常处理中的一些特殊情况举例
  2. Java进阶:Semaphore信号量基本使用
  3. wifi拥挤时防掉线小技巧
  4. shell比较两个字符串是否相等
  5. java.sql.SQLSyntaxErrorException: Unknown database ‘spring‘
  6. ECS Windows系统使用自带监视器查看IIS并发连接数
  7. 淘宝商城事件:中小卖家缺失的互联网信任
  8. selenium-模拟登录QQ空间(附模拟滑动验证码)
  9. linux7怎么把gpt分区改成MBR,GPT转MBR|硬盘GPT分区转MBR教程(两种办法)
  10. miui中的网页链接调用服务器,miui新增网页链接调用服务有什么用?
  11. 每股收益具体怎么来的
  12. 【新年新气象_新年CSDN第一篇】斯特林数简介及应用
  13. 2018年最新old男孩python全栈第九期课程-大牛编程吧-Python编程精品区-大牛编程吧
  14. 我们的爱恨情仇:人性-关系-危机-和谐的科学研究
  15. autocad2007二维图画法_CAD中如何绘制二维图形
  16. (一)JMeter性能测试,完整入门篇:性能测试操作步骤
  17. 图机器学习——5.9 图神经网络:图的增广
  18. 有三类人永远做不了程序员
  19. MySQL报错no connection established
  20. OC--category(类目、分类、类别)

热门文章

  1. c++ 走向高级之日积月累
  2. 职场必须要会的餐桌礼仪
  3. js实现的省市县三级联动的最新源码
  4. OleDbCommandBuilder 使用方法
  5. Linux下日志分析的几个常用命令
  6. java+arrayblockquene_Java源码分析-ArrayBlockingQueue
  7. 信息学奥赛一本通(1123:图像相似度)
  8. 树形结构 —— 树与二叉树 —— 树的重心
  9. Addition Chains(信息学奥赛一本通-T1443)
  10. 暑期训练日志----2018.8.7