basic spark or spark essentials-01(notes)

  • parallelized,lazily transform,cache(),actions
  • 算子

算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。数据转化为Spark中的数据块,RDD就是一组分区,物理上是元数据结构存储映射关系,物理对应一个block。通过BlockManager进行管理。

  1. Transformation: 
    1. value类:不触发提交作业,处理Value型数据
    2. Key-Value:不触发提交作业,处理(k,v)型数据

1=>1,1=>N,分区结构不变。1=>1分区改变,如union,coalesce(分区减少),sample, filter,subtract,distinct。kvpair: 对单个RDD sort/partitionBy(优化,一致性分区划分); 以及其他涉及重排同为shffle类操作。

  1. Action: 触发SparkContext提交Job作业
action:要么生成scala,or生成标量数据,or写入存储,or checkpoint
 
  • KEY-VALUE

PairRDDFunctions:为key-value对的RDD数据提供运算操作,如groupByKey。

reduceByKey(func)=>(k,v) 对key一样的piar的value进行lambda

sortByKey() 

groupByKey()

  • Use Case

1  大量var的单一或迭代job  只读table的lookup;ML里的vector计算

2  job执行时有count事件

  1. broadcast var
    1. Broadcast: 广播变量类。广播变量允许保留一个只读的变量,缓存在每一台机器上,而非每个任务保存一份拷贝。只读var(a large dataset) cached on workers,无论多少tasks只ship给worker一次-using efficient broadcast algorithm
  2. accumulators
    1. 只能被关联op加运算,提高parallel counters and sums,只有driver可读,task不能。
    2. 在action中每个task只能更新一次accm,而transformation中则不一定。transformation可能需要运行多次如果一个node很慢或失败。=>accum在transformation中只能用于debug
    3. def f(x): {global accum;accum+=x}  rdd.foreach(f)

 

driver:   sc.broadcast([1,2,3])

worker:     broadcasVar.value

 

  • example for accumulators--空行count

1开始设置accum为0 2func:空行则accum+1 否则返回line.split(" ")

3将func为参用flatMap file.flatMap(func) 对每一行func,返回一seq为line以" "分割的每个word

 

posted on 2017-09-26 23:00  satyrs  阅读(143)  评论(0编辑  收藏  举报

导航