网易首页 > 网易号 > 正文 申请入驻

Spark1.6官方文档译文系列一 | Spark快速入门

0
分享至

温馨提示

本公众号专注分享大数据技术Spark、Hadoop等,如果你是初学者、或者是自学者,这里都是可以提供免费资料,也可以加小编微信号:wusc35,小编可以给你学习上、工作上一些建议以及可以给你提供免费的学习资料!学习技术更重要的是在于学习交流!等你来...

注:本公众号纯属个人公益号!免费分享所有学习资料!希望朋友多多支持!多多关注!

《Spark 官方文档》Spark快速入门

转载自:并发编程网 – ifeve.com

本文链接地址:http://ifeve.com/spark-quick-start/

快速入门

本教程是对Spark的一个快速简介。首先,我们通过Spark的交互式shell介绍一下API(主要是Python或Scala),然后展示一下如何用Java、Scala、Python写一个Spark应用。更完整参考看这里:programming guide

首先,请到Spark website下载一个Spark发布版本,以便后续方便学习。我们暂时还不会用到HDFS,所以你可以使用任何版本的Hadoop。

使用Spark shell交互式分析 基础

利用Spark shell 很容易学习Spark API,同时也Spark shell也是强大的交互式数据分析工具。Spark shell既支持Scala(Scala版本的shell在Java虚拟机中运行,所以在这个shell中可以引用现有的Java库),也支持Python。在Spark目录下运行下面的命令可以启动一个Spark shell:

  • Scala

  • Python

./bin/spark-shell

Spark最主要的抽象概念是个分布式集合,也叫作弹性分布式数据集(Resilient Distributed Dataset – RDD)。RDD可以由Hadoop InputFormats读取HDFS文件创建得来,或者从其他RDD转换得到。下面我们就先利用Spark源代码目录下的README文件来新建一个RDD:

scala> val textFile = sc.textFile("README.md") textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3

RDD有两种算子,action算子(actions)返回结果,transformation算子(transformations)返回一个新RDD。我们先来看一下action算子:

scala> textFile.count() // Number of items in this RDD res0: Long = 126 scala> textFile.first() // First item in this RDD res1: String = # Apache Spark

再来看下如何使用transformation算子。我们利用filter这个transformation算子返回一个只包含原始文件子集的新RDD。

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark")) linesWithSpark: spark.RDD[String] = spark.FilteredRDD@7dd4af09

把这两个例子串起来,我们可以这样写:

scala> textFile.filter(line => line.contains("Spark")).count() res3: Long = 15 更多RDD算子

RDD action 和 transformation 算子可以做更加复杂的计算。下面的代码中,我们将找出文件中包含单词数最多的行有多少个单词:

  • Scala

  • Python

scala>textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b) res4: Long = 15

首先,用一个map算子将每一行映射为一个整数,返回一个新RDD。然后,用reduce算子找出这个RDD中最大的单词数。map和reduce算组的参数都是scala 函数体(闭包),且函数体内可以使用任意的语言特性,或引用scala/java库。例如,我们可以调用其他函数。为了好理解,下面我们用Math.max作为例子:

scala> import java.lang.Math import java.lang.Math scala>textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b)) res5: Int = 15

Hadoop上的MapReduce是大家耳熟能详的一种通用数据流模式。而Spark能够轻松地实现MapReduce流程:

scala> val wordCounts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey((a, b) => a + b) wordCounts: spark.RDD[(String, Int)] = spark.ShuffledAggregatedRDD@71f027b8

这个例子里,我使用了flatMap, map, and reduceByKey 这几个transformation算子,把每个单词及其在文件中出现的次数转成一个包含(String,int)键值对的RDD,计算出每个单词在文件中出现的次数

scala> wordCounts.collect() res6: Array[(String, Int)] = Array((means,1), (under,2), (this,3),
(Because,1), (Python,2), (agree,1), (cluster.,1), ...)

缓存

Spark同样支持把数据集拉到集群范围的内存缓存中。这对于需要重复访问的数据非常有用,比如:查询一些小而”热“(频繁访问)的数据集 或者 运行一些迭代算法(如 PageRank)。作为一个简单的示例,我们把 linesWithSpark 这个数据集缓存一下:

  • Scala

  • Python

scala> linesWithSpark.cache() res7: spark.RDD[String] = spark.FilteredRDD@17e51082 scala> linesWithSpark.count() res8: Long = 19 scala> linesWithSpark.count() res9: Long = 19

用Spark来缓存一个100行左右的文件,看起来确实有点傻。但有趣的是,同样的代码可以用于缓存非常大的数据集,即使这些数据集可能分布在数十或数百个节点,也是一样。你可以用 bin/spark-shell 连到一个集群上来验证一下,更详细的请参考:programming guide.

独立的应用程序

假设我们想写一个独立的Spark应用程序。我们将快速的过一下一个简单的应用程序,分别用Scala(sbt编译),Java(maven编译)和Python。

  • Scala

  • Java

  • Python

首先用Scala新建一个简单的Spark应用 – 简单到连名字都叫SimpleApp.scala

/* SimpleApp.scala */ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp { def main(args: Array[String]) { val logFile = "YOUR_SPARK_HOME/README.md" val conf = new SparkConf().setAppName("Simple Application") val sc = new SparkContext(conf) val logData = sc.textFile(logFile, 2).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println("Lines with a: %s, Lines with b: %s".format(numAs, numBs)) } }

注意,应用程序需要定义一个main方法,而不是继承scala.App。scala.App的子类可能不能正常工作。

这个程序,统计了Spark README文件中分别包含‘a’和’b’的行数。注意,你需要把YOUR_SPARK_HOME换成你的Spark安装目录。与之前用spark-shell不同,这个程序有一个单独的SparkContext对象,我们初始化了这个SparkContext对象并将其作为程序的一部分。

我们把一个 SparkConf 对象传给SparkContext的构造函数,SparkConf对象包含了我们这个应用程序的基本信息和配置。

我们的程序需要依赖Spark API,所以我们需要包含一个sbt配置文件,simple.sbt,在这个文件里,我们可以配置Spark依赖项。这个文件同时也添加了Spark本身的依赖库:

name := "Simple Project" version := "1.0" scalaVersion := "2.10.5" libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0"

为了让sbt能正常工作,我们需要一个典型的目录结构来放SimpleApp.scala和simple.sbt程序。一旦建立好目录,我们就可以创建一个jar包,然后用spark-submit脚本运行我们的代码。

# Your directory layout should look like this $ find . . ./simple.sbt ./src ./src/main ./src/main/scala ./src/main/scala/SimpleApp.scala # Package a jar containing your application $ sbt package ... [info] Packaging {..}/{..}/target/scala-2.10/simple-project_2.10-1.0.jar # Use spark-submit to run your application $ YOUR_SPARK_HOME/bin/spark-submit \ --class "SimpleApp" \ --master local[4] \ target/scala-2.10/simple-project_2.10-1.0.jar ... Lines with a: 46, Lines with b: 23 下一步,恭喜你!你的首个Spark应用已经跑起来了!

欢迎关注,获取更多收获

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
2004年,“赵忠祥数和我保持不正当关系,把我折磨得满身疾病。”

2004年,“赵忠祥数和我保持不正当关系,把我折磨得满身疾病。”

南权先生
2026-02-05 15:52:26
陈毅去世后,追悼词周总理写“功大于过”,毛主席批示:去掉这个

陈毅去世后,追悼词周总理写“功大于过”,毛主席批示:去掉这个

雍亲王府
2026-03-03 13:35:07
美官员:美国临时允许印度购买滞留在海上的俄石油

美官员:美国临时允许印度购买滞留在海上的俄石油

每日经济新闻
2026-03-06 11:46:16
真没有钱解决不了的事吗?网友:如果有,那是因为你钱还不够多

真没有钱解决不了的事吗?网友:如果有,那是因为你钱还不够多

解读热点事件
2026-02-23 18:34:51
乌兹别克女足主帅:很难比较中国队和朝鲜队,两队风格不同

乌兹别克女足主帅:很难比较中国队和朝鲜队,两队风格不同

懂球帝
2026-03-06 20:23:06
太阳彻底被坑惨!狄龙涉大麻被捕,3300万水货拖垮全队

太阳彻底被坑惨!狄龙涉大麻被捕,3300万水货拖垮全队

草莓解说体育
2026-03-07 10:26:40
13分逆转!杜兰特20+8阿门12中11,申京28+6被弃用,探花首发第二

13分逆转!杜兰特20+8阿门12中11,申京28+6被弃用,探花首发第二

鱼崖大话篮球
2026-03-07 11:33:51
女篮有人身价过亿?中国女篮的5大隐形富婆,看看都有谁

女篮有人身价过亿?中国女篮的5大隐形富婆,看看都有谁

刘哥谈体育
2026-03-06 19:27:03
史诗级封杀!2000万网红“听风的蚕”彻底凉了

史诗级封杀!2000万网红“听风的蚕”彻底凉了

互联网品牌官
2026-02-12 01:17:23
委内瑞拉恢复稀释原油出口

委内瑞拉恢复稀释原油出口

财联社
2026-03-07 04:14:31
易中天说风雨能进国王不能进,为啥也受到攻击?

易中天说风雨能进国王不能进,为啥也受到攻击?

律法刑道
2026-03-07 10:00:28
香港豪门正室的清醒:忍27年赢下一切

香港豪门正室的清醒:忍27年赢下一切

草莓解说体育
2026-03-07 04:20:48
潘功胜:有序推进人民币国际化

潘功胜:有序推进人民币国际化

每日经济新闻
2026-03-06 17:43:49
新婚女子手臂成亮点,“满眼都是xxx”,难道新郎一点都不在乎?

新婚女子手臂成亮点,“满眼都是xxx”,难道新郎一点都不在乎?

仙仙先生
2026-01-30 09:35:22
钨价大涨之后,这几种金属有望接力走强,逻辑全讲透

钨价大涨之后,这几种金属有望接力走强,逻辑全讲透

亿通电子游戏
2026-03-07 08:30:58
突发!普京扔出重磅炸弹:既然不想要,那我干脆不给了!

突发!普京扔出重磅炸弹:既然不想要,那我干脆不给了!

壹知眠羊
2026-03-07 11:42:33
美退伍老兵听证会上高喊没人愿为以色列而战 !“美国人不希望他们的儿女,为以色列去打仗”,参议员上前拉扯老兵,致其骨折

美退伍老兵听证会上高喊没人愿为以色列而战 !“美国人不希望他们的儿女,为以色列去打仗”,参议员上前拉扯老兵,致其骨折

每日经济新闻
2026-03-06 17:13:35
阿里人事地震持续发酵!有网友直言,那些踏实干活的人得不到激励

阿里人事地震持续发酵!有网友直言,那些踏实干活的人得不到激励

火山詩话
2026-03-05 16:37:15
女子故意扮丑去相亲,男子一眼看中,女子吃惊:他是不是太饿了

女子故意扮丑去相亲,男子一眼看中,女子吃惊:他是不是太饿了

丫头舫
2026-02-10 22:18:05
女毒枭阮氏慧花5000万买精液逃避死刑,结果如何?

女毒枭阮氏慧花5000万买精液逃避死刑,结果如何?

命运自认幽默
2026-03-06 05:11:15
2026-03-07 12:47:00
大数据之谜
大数据之谜
专注分享大数据技术
43文章数 396关注度
往期回顾 全部

科技要闻

OpenClaw爆火,六位"养虾人"自述与AI共生

头条要闻

媒体:美国打仗遇到人口3000万以上国家就没法全身而退

头条要闻

媒体:美国打仗遇到人口3000万以上国家就没法全身而退

体育要闻

塔图姆归来:凯尔特人的春之绿

娱乐要闻

周杰伦田馥甄的“JH恋” 被扒得底朝天

财经要闻

针对"不敢休、不让休"怪圈 国家出手了

汽车要闻

逃离ICU,上汽通用“止血”企稳

态度原创

数码
亲子
房产
旅游
公开课

数码要闻

英特尔酷睿Ultra 5 250K Plus处理器PassMark跑分曝光

亲子要闻

手外纪事|第52期《当孩子的拇指是蟹钳,一位父亲的抉择与释然》

房产要闻

传统学区房熄火?2月海口二手房爆火的板块竟然是…

旅游要闻

半价、免票!“三八”国际劳动妇女节,江苏十三城“美好福利”大放送

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版