- parallelized,lazily transform,cache(),actions
- 算子
算子是RDD中定义的函数,可以对RDD中的数据进行转换和操作。数据转化为Spark中的数据块,通过BlockManager进行管理。
- Transformation:
- value类:不触发提交作业,处理Value型数据
- Key-Value:不触发提交作业,处理(k,v)型数据
- Action: 触发SparkContext提交Job作业
- KEY-VALUE
reduceByKey(func)=>(k,v) 对key一样的piar的value进行lambda
sortByKey()
groupByKey()
- Use Case
1 大量var的单一或迭代job 只读table的lookup;ML里的vector计算
2 job执行时有count事件
- broadcast var
- 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)
只读var(a large dataset) cached on workers,无论多少tasks只ship给worker一次-using efficient broadcast algorithm
driver: sc.broadcast([1,2,3]) worker: broadcasVar.value
- example for broadcast var--contact中的所属国家统计
1建一个表2求(k,v)的function3将此function放入map中
4spark自动创建一个closure包含这个function以及1所建立的表,一起发送给worker
计算第二个的时候,4将被spark重复
=>broadcast to all workers ,使4不用重复
- example for accumulators--空行count
1开始设置accum为0 2func:空行则accum+1 否则返回line.split(" ")
3将func为参用flatMap file.flatMap(func) 对每一行func,返回一seq为line以" "分割的每个word
- groupByKey join groupWith
- saveAsTextFile saveAsSequenceFile
时间: 2024-10-13 10:38:31