本项目是 apache spark1.6.1方文档的中文翻译版,之前翻译过spark1.5,由于网站有组织翻译spark1.6.1所以我又重新翻译了一下,我翻译的这一章和spark1.5一样。本次翻译主要针对对spark感兴趣和致力于从事大数据方法开发的人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助。
这个翻译本应该在二月份完成,由于一直出差加上加班导致短短一篇文章迟迟没有完成,在此想大家表示深深的歉意。同时也希望有能力的童鞋能够一起努力推动大数据在中国的发展,让天下没有难学的技术谢谢大家。
<a href="http://spark.apache.org/docs/latest/quick-start.html#caching">缓存caching</a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#self-contained-applications">独立应用(self-contained applications)</a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#where-to-go-from-here">下一章(where to go from here)</a>
spark shell提供了一个简单学习api的方式, 同时它也是一个有用的交互分析工具. 它可以使用scala(它是一种运行在java虚拟机上并且可以使用java依赖包)或者python. 切换到spark目录并启动按照以下方式启动它:
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_scala_0"><b>scala</b></a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_python_0"><b>python</b></a>
spark的主要抽象是一个分布式数据集被称为弹性分布式数据集 (rdd). rdds可以通过hadoop上面的输入格式( 例如 hdfs 文件)或者通过其他的rdd转换. 让我们通过spark目录中的readme文件创建一个新的rdd:
我们能够通过链式编程把transformations 操作和 actions操作连接一起:
rdd操作因子和转换因子可以用来进行更加复杂的计算.让我们寻找到需要的数据:
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_scala_1"><b>scala</b></a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_python_1"><b>python</b></a>
第一个map一行整数数值,创建一个新的rdd. <code>reduce被调用来查找最多数据一行的数据个数</code>. <code>map的参数和</code> <code>reduce的参数是scala函数自变量</code>(闭包),我们能够使用任何scala或java的语言的特性. 例如, 我们很容易的调用在其他地方定义的函数. 我们使用 <code>math.max()函数使代码很容易理解</code>:
通用的数据处理流程是mapreduce,hadoop广泛使用. spark很容易的继承mapreduce计算流程:
spark也支持把一个数据集放到一个集群的缓存里面.当数据多次访问它很有用,例如当你查询一个常用的数据集或者运行一个 pagerank算法的时候. 举一个简单的例子, 让我们把 <code>lineswithspark</code> 数据集缓存起来:
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_scala_2"><b>scala</b></a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_python_2"><b>python</b></a>
假如我希望开发一个独立的应用通过spark api. 我们可以通过 scala (with sbt), java (with maven), and python来调用开发spark api.
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_scala_3"><b>scala</b></a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_java_3"><b>java</b></a>
<a href="http://spark.apache.org/docs/latest/quick-start.html#tab_python_3"><b>python</b></a>
现在我们创建一个简单的spark应用,实际上, 它的名字是 <code>simpleapp.scala</code>:
注意一个应用应该定义在一个 <code>main()函数里面或者通过继承</code><code>scala.app</code>. <code>scala.app的子类可能不能正确的工作</code>.
这个程序仅仅是统计readme文件中包含‘a’和‘b’的数量.注意你需要替换你的本地的your_spark_home 环境变量. 不同于前面的spark shell例子, 它需要初始化sparkcontext, 我们需要初始化 sparkcontext作为程序运行的一部分.
我们的应用依赖spark api, 所以我们也包含sbt 配置文件, <code>simple.sbt</code>, 它包含了spark的一些依赖. 这个文件增加一个仓库,而这些仓库是spark运行不可缺少的一部分:
为了使 sbt能够正确的工作, 我们需要布局<code>simpleapp.scala</code> 和<code>simple.sbt按计划执行这种类型结构</code>.一旦配置正确, 我们能够创建一个jar包包含这个应用的代码, 然后使用 <code>spark-submit</code> 来运行我们的程序.
配置运行你的第一个spark程序!