Spark学习笔记

1.    什么是RDD?

Resilient Distributed Dataset弹性分布式数据集,能够横跨集群所有节点进行并行计算的分区元素的集合。

 

2.    Spark中两种类型的共享变量

一是广播变量(broadcast variables),用来在所有节点内存中缓存一个值;另外一种是累加器(accumulators),其只能执行添加操作(add)。

 

3.    spark-submit命令

spark-submit --master yarn --name StreamingTest  --driver-class-path ./conf --class com.sgcc.hj.StreamingTest --executor-memory 1G SparkTest.jar

--name 任务名称

--master 运行模式(local, yarn等)

--jar 额外运行的JAR包

--drive-class-path 设置classpath

--class main函数所在类

--executor-memory 每个executor占用最大内存

 

4.    并行集合

通过一个已有的集合,通过调用SparkContext的parallelize实现分布式数据集。

 

5.    flatMap和map的区别

map将函数用于rdd中的每个元素,将返回值构建成新的rdd。

flatMap将函数应用于rdd中的每个元素,将返回值迭代器中所有元素构建成新的rdd,实际上就是先map后flat(扁平化)。

 

val str = sc.parallelize(List("I am a good student", "u can heat me", "but I like it"))

 

str.map(x => x.split(" ")).collect

Array[Array[String]] = Array(Array(I, am, a, good, student), Array(u, can, heat, me), Array(but, I, like, it))

 

str.flatMap(x => x.split(" ")).collect

Array[String] = Array(I, am, a, good, student, u, can, heat, me, but, I, like, it)

 

6.    RDD中的两类操作

第一类是转换(transformation),从已经存在的数据集创建新的数据集;第二类是动作(action),在数据集上进行计算,返回一个值到驱动程序。例如map是转换,reduce是动作。

 

7.    cache()和persist()的区别

cache方法最终还是调用persist方法,persist可以传入参数设定缓存级别,默认的是MEMORY_ONLY,两个方法都可以通过unpersist方法取消缓存。

 

8.    Spark删除数据

Spark会自动监控每个节点缓存的使用情况,利用最近最少使用原则删除老旧的数据。如果想手动删除,使用unpersist方法。

 

9.    广播变量

缓存一个只读的变量在每台机器上,而不是任务上,通过调用SparkContext.broadcast方法将变量广播,调用时则通过value方法访问。

val bv = sc.broadcast(Array(1, 2, 3))

bv.value

 

10.              累加器

通过SparkContext.accumulator(v)方法从初始变量v中创建,运行在集群上时可以通过add方法或者+=操作符实现加值,调用时通过value方法访问。

 

val acc = sc.accumulatror(0, “acc1”)

sc.parallelized(Array(1, 2, 3, 4)).foreach(x => acc  += x)

acc.value

 

11.              Spark streaming中几点注意点

一旦一个context已经启动,就不能有新的流算子建立并添加到context中。

一旦一个context已经停止,就不能重新启动。

在JVM中,同一时间只能有一个streaming处于活跃状态。

在StreamingContext上调用stop()方法,也会光比SparkContext对象,如果只想关闭StreamingContext,设置stop()可选参数为false。

一个SparkContext对象可以重复利用去创建对各StreamingContext对象,前提是之前的StreamingContext已经关闭,并且SparkContext没有关闭。

 

12.              离散流

离散流(DStream)是Spark Streaming中最基本的抽象,代表一个连续的数据流,由一系列RDD组成,每个RDD都包含确定时间间隔内的数据。

任务对DStream的操作都转换成了对DStreams中隐含的RDD的操作,多个DStream输入就需要对应多个Receiver进行接受。

Receiver作为一个长期运行的任务,其运行在executor上,并占有一个核(如果是本地运行,则对应一个线程),分配Streaming应用的核是很关键的。

 

13.              如何将RDD转换为SchemaRDD

一是利用反射推断模式,Spark的Scala接口可以自动将RDD转换为SchemaRDD,代码如下:

Case class Person(name: String, age: Int)

val people = sc.textFile(“people.txt”).map(_.split(“ ”)).map(p => Person(p(0), p(1)))

people.registerTempTable(“people”)

val p = sqlContext.sql(“SELECT name , age FROM people)

p.map(t => “Name: ” + t(0)).collect().foreach(println)

当样本类不能提前确定,一个SchemaRDD可以通过三个步骤来创建,从原来的RDD创建一个行的RDD,创建一个StructType表示的模式与第一步创建的RDD的行结构相匹配,在行RDD上通过applySchema方法应用模式。

转载于:https://www.cnblogs.com/kevin19900306/p/5690802.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值