《Spark1.6.1官方文档》Spark1.6.1操作指南

本项目是 Apache Spark1.6.1方文档的中文翻译版,之前翻译过spark1.5,由于网站有组织翻译Spark1.6.1所以我又重新翻译了一下,我翻译的这一章和spark1.5一样。本次翻译主要针对对Spark感兴趣和致力于从事大数据方法开发的人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助。

这个翻译本应该在二月份完成,由于一直出差加上加班导致短短一篇文章迟迟没有完成,在此想大家表示深深的歉意。同时也希望有能力的童鞋能够一起努力推动大数据在中国的发展,让天下没有难学的技术谢谢大家。

Quick Start

本篇文章介绍了Spark快速入门. 我们将第一次通过Spark的Shell介绍API(通过 Python 或Scala), 然后展示怎么通过Java,Scala和Python写应用. 看 编程指南了解更多信息.

跟着下面指导, 第一步下载安装包从 Spark官方网址. 我们不会使用HDFS,你可以下载一个匹配任何Hadoop版本的发行版本.

Spark Shell交互分析

基础

Spark Shell提供了一个简单学习API的方式, 同时它也是一个有用的交互分析工具. 它可以使用Scala(它是一种运行在Java虚拟机上并且可以使用Java依赖包)或者Python. 切换到Spark目录并启动按照以下方式启动它:

./bin/spark-shell

Spark的主要抽象是一个分布式数据集被称为弹性分布式数据集 (RDD). RDDs可以通过Hadoop上面的输入格式( 例如 HDFS 文件)或者通过其他的RDD转换. 让我们通过Spark目录中的README文件创建一个新的RDD:

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

RDDs 有actions(我翻译成操作因子), 它能够返回值, 和transformations(转换), 它能够返回一个新的RDDs. Let’s start with a few actions:

scala> textFile.count() // Number of items in this RDD
res0: Long = 126

scala> textFile.first() // First item in this RDD
res1: String = # Apache Spark

现在让我们使用转换操作.我们将使用 filter 转换操作返回一个新的RDD包含这个文件的子集.

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

我们能够通过链式编程把transformations 操作和 actions操作连接一起:

scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"?
res3: Long = 15

更多的RDD操作

RDD操作因子和转换因子可以用来进行更加复杂的计算.让我们寻找到需要的数据:

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

第一个map一行整数数值,创建一个新的RDD. reduce被调用来查找最多数据一行的数据个数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

通用的数据处理流程是MapReduce,Hadoop广泛使用. 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

这里, 我们组合了 flatMapmap, 和reduceByKey 转换因子来计算文件中每个单词的数量通过一个RDD (String, Int) 对. 通过Shell统计单数的数量, 我们能够使用 collect 因子:

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> 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 API. 我们可以通过 Scala (with sbt), Java (with Maven), and Python来调用开发Spark API.

现在我们创建一个简单的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" // Should be some file on your system
    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.Appscala.App的子类可能不能正确的工作.

这个程序仅仅是统计README文件中包含‘a’和‘b’的数量.注意你需要替换你的本地的YOUR_SPARK_HOME 环境变量. 不同于前面的Spark shell例子, 它需要初始化SparkContext, 我们需要初始化 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.1"

为了使 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程序!

  • 想深入的了解SparkAPI, 可以打开 Spark programming guide, 或者看“Programming Guides” 菜单了解其他组件.
  • 如果想在集群上面运行引用, 可以点击 deployment overview了解.
  • 最后, Spark包含几个简单的实例 (ScalaJavaPythonR). 你可以按照下面的实例运行他们:

# For Scala and Java, use run-example:
./bin/run-example SparkPi

# For Python examples, use spark-submit directly:
./bin/spark-submit examples/src/main/python/pi.py

# For R examples, use spark-submit directly:
./bin/spark-submit examples/src/main/r/dataframe.R

 转载自 并发编程网 - ifeve.com

时间: 2025-01-19 02:24:30

《Spark1.6.1官方文档》Spark1.6.1操作指南的相关文章

jQuery 1.4官方文档详细讲述新特性功能

为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的编程,测试,和记录文档的工作,我们为此感到很骄傲. 我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-Rémi Babe, Ariel Flesler, Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl Swedberg, and

TestNG官方文档中文版(9)-重复失败测试,junit测试,jdk1.4支持

5.10 - Rerunning failed tests 套件中的测试失败时,每次testNG都会在输出目录中创建一个名为testng-failed.xml 的文件.这个xml文件包含只重新运行这些失败的测试方法的必要信息,容许只运行这些 失败的测试而不必运行全部测试.因此,一种典型的情况将是这样: java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml java -classpat

TestNG官方文档中文版(6)-参数

5.5 - Parameters 测试方法不要求是无参数的.你可以在每个测试方法上使用任意数量的参数,并指示 testNG传递正确的参数. 有两种方式用于设置参数:使用testng.xml或者编程式. 5.5.1 - Parameters from testng.xml 如果你要为你的参数使用简单值,你可以在你的testng.xml中明确指定: @Parameters({ "first-name" }) @Test public void testSingleString(String

TestNG官方文档中文版(3)-testng.xml

TestNG的官方文档的中文翻译版第3章,原文请见 http://testng.org/doc/documentation-main.html 3 - testng.xml 调用TestNG由几种不同方法: * 使用testng.xml文件 * 使用ant * 从命令行 这节描述testng.xml的格式(文档的后面会讲到ant和命令行). 当前testng.xml的DTD文件可以从官方找到:http://testng.org/testng-1.0.dtd.( 为了方便使用,你可能更喜欢浏览HT

TestNG官方文档中文版(2)-annotation

TestNG的官方文档的中文翻译版第二章,原文请见 http://testng.org/doc/documentation-main.html 2 - Annotation 这里是TestNG中用到的annotation的快速预览,还有它们的属性. @BeforeSuite: 被注释的方法将在所有测试运行前运行 @AfterSuite: 被注释的方法将在所有测试运行后运行 @BeforeTest: 被注释的方法将在测试运行前运行 @AfterTest: 被注释的方法将在测试运行后运行 @Befo

TestNG官方文档中文版(1)-介绍

最近决定开始使用TestNG来替代junit,作为未来的单元测试基础组件. TestNG的官方文档请见: 1.介绍 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个 类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服 务器). 编写一个测试的过程有三个典型步骤: * 编写测试的 业务逻辑并在代码中插入TestNG annotation * 将测试信息添加到testng.xml文件或者build.xml中 * 运行TestNG 在欢迎页面

Apache Storm 官方文档中文版

原文链接    译者:魏勇 About 本项目是 Apache Storm 官方文档的中文翻译版,致力于为有实时流计算项目需求和对 Apache Storm 感兴趣的同学提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 虽然 Storm 的正式推出已经有好几个年头了,发行版也已经到了 0.10.x,但是目前网络上靠谱的学习资料仍然不多,很多比较有价值的资料都过时了(甚至官方网站自己的资料都没有及时更新,这大概也是发展太快的社区的通病),而较新的资料大多比较零碎,在关键内容的描述上也有些

《Apache Velocity用户指南》官方文档

Quick Start 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎.它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起.本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网

Java官方文档索引

之前一直感觉Java的官方文档有些杂乱,最近特意整理了一下,仅供参考. 入口 Oracle官方文档入口:http://docs.oracle.com/.下级页面这边只整理了JavaEE跟JavaSE的文档. JavaEE JavaEE文档入口:http://docs.oracle.com/javaee/.下级页面有JavaEE相关的API跟Tutorial文档: http://docs.oracle.com/javaee/7/api/ http://docs.oracle.com/javaee/