Spark1.1.1官网文档翻译2快速开始

快速开始

 

Spark提供了一个外部的API工具来进行交互式分析数据,使用一个Scala方式(利用java虚拟机)或者Python方式,只需要使用以下方式打开

./bin/spark-shell

Spark的基本抽象是一个弹性分布式数据集简称RDD,RDD可以从InputFormat创建(如HDFS文件)或者其它的transformations产生。

scala> valtextFile=sc.textFile("README.md")

textFile:spark.RDD[String]=spark.MappedRDD2ee9b6e3

RDD有actions,会产生返回值,还有transformations,返回一个新RDD的指针,下面我们来执行一个actions

 

scala> textFile.count()

res0:long=126

 

scala> textFile.first()

res1:string = #Apache Spark

 

现在让我们来试试transformation,我们会使用filter 这个transformations 来返回一个新的RDD文本项子集

scala> vallineWithSpack=textFile.filter(line=>line.contains("Spark"))

lineWithSpark:spark.RDD[String]=spark.FilteredRDD@7dd4af09

我们可以把Action和transformations串起来

scala> textFile.filter(line =>line.contains("Spark")).count()

res3: Long=15

 

RDD的其它一些属性

RDD的Action和transformations可以用于更复杂的计算,比如想找出符合更多条件的单词

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

res4:Long=15

第一个maps返回一个integer值,创建了一个RDD,reduce调用这个RDD查询最大的行数,map和reduce都是Scala函数式,可以使用任何基于Scala/Java的特征库,比如max()

scala> import java.lang.Math

import java.lang.Math

scala> textFile.map(line=>line.split(" ").size).reduce((a,b)=>Math(a,b))

MapReduce是一个常见的数据处理模式,Spark实现了这一形式

scala> valwordCounts=textFile.flagMap(line=> line.split(" ")).map(word=>(word,1)).reduceByKey((a,b)=>a+b)

wordCounts:spark.RDD[(String,Int)]=spark.ShuffledAggregatedRDD@71f027b8

在这里,我们结合flatMap,map和reduceByKey转换来计算每个单词的文件作为RDD的(String,Int)对,我们的收集单词的数量

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> lineWithSpark.cache()

res7:spark.RDD[String]=spark.FilteredRDD@17e51082

 

scala> lineWithSpark.count()

res8:Long=15

 

scala> lineWithSpark.count()

res9:Long=15

 

似乎使用Spark搜索和缓存一个100行的文本文件有点傻,有趣的是,这些函数可以在非常大的数据集上面使用,甚至把他们分散在几十或者几百个节点上,你也可以用交互的方式连接bin/spark-shell就如在编程指南中介绍的一样

 

单独的程序

现在我们想使用SparkAPI写一个独立的应用程序,我们将通过一个简单的示例来讲解,在Scala(SBT),java和Python(Maven)

我们用Scala创建一个简单的程序,名字就叫SimpleApp.scala

/* SimpleApp.scala */

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

import org.apache.spark.SparkConf

 

object SimpleApp{

    defmain(args:Array[String]){

        vallogFile="YOUR_SPARK_HOME/README.md"

        valconf=new SparkConf().setAppName("Simple Application")

        val sc=new SparkContext(conf)

        vallogData=sc.textFile(logFile,2).cache()

        valnumAs=logData.Filter(line=> line.contains("a")).count()

        valnumBs=logData.Filter(line=> line.contains("b")).count()

        println("Lineswith a:%s,Lines with b:%s".format(numAs,numBs))

    }

}

 

我们传递一个SparkConf对象到程序里面的SparkContext构造器中

我们的应用程序依赖Spark的API,所以我们添加一个SBT配置文件"simple.sbt"对依赖文件进行一个说明

name :="Simple Project"

version :="1.0"

scalaVersion :="2.10.4"

libraryDependencies+="org.apache.spark" %% "spark-core" % "1.1.0"

 

想要SBT进行正常工作,我们需要按照结构部署simpleapp.scala和simple.sbt到相关目录,一旦到位,我们可以创建一个包含程序代码的jar文件,然后使用Spark提交脚本运行程序

你的文件目录应该类似这样

$find .

.

./simple.sbt

./src

./src/main

./src/main/scala

./src/main/scala/SimpleApp.scala

 

打包文件

$sbt package

...

[info] Packaging {..}{..}/target/scala-2.10/simple-project_2.10-1.0.jar

 

运行spark-submit启动你的程序

$YOUR_SPARK_HOME/bin/spark-submit \

--class "SimpleApp"

--master local[4]

target/scala-2.10/simple-project_2.10-1.0.jar

...

Line with a:46,Line with b:23

祝贺你的第一个Spark程序成功运行

程序中有几个示例,你可以用一下方式运行它们

#Scala和java 运行run-example

./bin/run-example SparkPi

 

#Python程序示例,使用spark-submit启动

./bin/spark-submit example/src/main/python/pi.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值