spark入门

2018-11-15  本文已影响0人  匪_3f3e

Cluster Manager 可以在下列模式下运行:

scala 介绍

Spark 支持 Scala、Java 和 Python 等语言,不过 Spark 本身是用 scala 语言开发的,所以在 Spark 应用程序开发中,Scala 被认为是当前和 Spark 兼容最好的语言。Scala 具有以下特点:

#创建 intRDD
val intRDD= sc. Parallelize (List (3,1,2, 5,5))
#intRDD转化为Array
intRDD.collect()

运算

map运算

Map 运算可以通过传入的函数,将每一个元素经过函数运算产生另外一个 RDD。如下,RDD 通过传入的函数 addOne,将每一个元素加 1 而产生另外一个 RDD。

def addOne (x: Int): Int={ return  (x+1)}
intRDD. map  (addOne). collect  ()
#匿名函数
intRDD.map(x =>x+1).collect()
#匿名函数+匿名参数
intRDD.map(_+1)

filter运算

#让 intRDD 筛选数字小于 3
intRDD. filter (x=> x <3). collect ()
#使用匿名参数让筛选数字小于 3,可使用下划线“_”来取代 x=> x <3
intRDD. filter (_<3). collect ()
#字符串的筛选
strRDD.filter(x =>x.contains("ra")).collect()

distinct运算

#删除重复的元素
intRDD.distinct().collect()
strRDD.distinct().collect()

randomSplit运算

#随机将rdd按比例切分,返回一个数组
val sRDD=intRDD.randomSplit(Array(0.2,0.8))
sRDD(0).collect
sRDD(1).collect

groupBy

groupBy 可以按照传入的匿名函数规则,将数据分为多个 Array。

#使用 groupBy 运算将整个集合分成奇数与偶数
#使用 groupBy 运算时,传入的匿名函数将整个集合按照奇数与偶数分为两个 Array,此运算会返回 Array [(String, Iterable [Int])]。
val gRDD=intRDD.groupBy (
x=> {if (x % 2==0) "even" else "odd"}
). collect

#读取第 1 个是偶数的 Array
gRDD (0)
#读取第 2 个是奇数的 Array
gRDD (1)

多个rdd转换运算

#创建 3 个范例 RDD
val intRDD1 = sc. Parallelize (List (3,1, 2,5,5))
val intRDD2 =sc. Parallelize (List (5, 6)) 
val intRDD3 = sc. Parallelize (List (2,7))

#union 并集运算
#可以使用下列命令,将 intRDD1、intRDD2、intRDD3 进行并集运算。
intRDD1. union (intRDD2). union (intRDD3), collect ()
#使用++符号进行并集运算
(intRDD1 ++ intRDD2++ intRDD3). collect ()

#intersection 交集运算
#将 intRDD1、intRDD2 进行交集运算
intRDD1. intersection (intRDD2). collect ()

#subtract 差集运算
intRDD1. subtract (intRDD2). collect ()

#cartesian 笛卡尔乘积运算
intRDD1. cartesian  (intRDD2). collect ()

spark部署

./bin/spark-submit --class org.apache.spark.examples.SparkPi \        #作业类名
    --master yarn \                       #spark模式
    --deploy-mode cluster \                #spark on yarn 模式
    --driver-memory 4g \                    #每一个driver的内存
    --executor-memory 2g \                    #每一个executor的内存
    --executor-cores 1 \                        #每一个executor占用的core数量
    --queue thequeue \                            #作业执行的队列
    examples/jars/spark-examples*.jar \            #jar包
    10                                               #传入类中所需要的参数

spark 任务划分

  1. 一个jar包就是一个Application

  2. 一个行动操作就是一个Job, 对应于Hadoop中的一个MapReduce任务

  3. 一个Job有很多Stage组成,划分Stage是从后往前划分,遇到宽依赖则将前面的所有转换换分为一个Stage

  4. 一个Stage有很多Task组成,一个分区被一个Task所处理,所有分区数也叫并行度。

上一篇 下一篇

猜你喜欢

热点阅读