basic spark or spark essentials-01(notes)
- parallelized,lazily transform,cache(),actions
- 算子
算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。数据转化为Spark中的数据块,RDD就是一组分区,物理上是元数据结构存储映射关系,物理对应一个block。通过BlockManager进行管理。
- Transformation:
- value类:不触发提交作业,处理Value型数据
- Key-Value:不触发提交作业,处理(k,v)型数据
1=>1,1=>N,分区结构不变。1=>1分区改变,如union,coalesce(分区减少),sample, filter,subtract,distinct。kvpair: 对单个RDD sort/partitionBy(优化,一致性分区划分); 以及其他涉及重排同为shffle类操作。
- 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事件
- broadcast var
- Broadcast: 广播变量类。广播变量允许保留一个只读的变量,缓存在每一台机器上,而非每个任务保存一份拷贝。只读var(a large dataset) cached on workers,无论多少tasks只ship给worker一次-using efficient broadcast algorithm
- accumulators
- 只能被关联op加运算,提高parallel counters and sums,只有driver可读,task不能。
- 在action中每个task只能更新一次accm,而transformation中则不一定。transformation可能需要运行多次如果一个node很慢或失败。=>accum在transformation中只能用于debug
- 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
From satrys,
Kristen wang