算子分为value-transform, key-value-transform, action三种。f是输入给算子的函数,比如lambda x: x**2

常用算子:

keys: 取pair rdd的key部分

values: 取pair rdd的value部分

map: f作用于每个元素

flatMap: f作用于每个元素、输出list,然后对list压平

mapValues: f作用于pair rdd的value部分

flatMapValues: f作用于pair rdd的value部分,然后对list压平(即将list各元素分发配对到对应的key后)

mapPartitions: f作用于每个part,输入是iterator

mapParttitionsWithIndex: f作用于每个part,输入是(index,iterator)

glom: 将元素汇集成list

groupBy: f作用于每个元素并构造key,相同key的元素聚合成value_list

groupByKey: pair rdd的相同key的元素shuffle后,value部分聚合成value_list

repartition: 设定每个rdd的part个数,包含shuffle操作(即汇集有相同key的pair),操作前后会改变并行度

coalesce: 设定并降低part数量,不做shuffle操作

repartitionAndSortWithinPartitions: 设定每个rdd的part个数,目标part中按照key部分排序

sortByKey: 对pair rdd的所有元素shuffle后按key部分排序

cogroup: 两个pair rdd shuffle后相同key的元素聚合成value_iterator_list

reduce: f遍历元素list,须满足交换律和结合律

reduceByKey: pair rdd shuffle后相同key的元素聚合成value_list,f遍历value_list

filter: f作用于每个元素输出bool值,满足条件的元素会保留

collect: 汇集所有的元素

take:取数据集前n个元素

union: 合并两个rdd的元素集合(不去重)

intersection: 两个rdd的元素集合取交集

join: pair rdd shuffle后相同key的value部分inner join,即(k, v1) join (k, v2) -> (k, (v1, v2))

distinct: 遍历元素list去重

subtract: 两个rdd的元素集合取差集

count: 计数元素个数

countByKey: 计数有相同key的value的个数,返回hashmap结构

saveAsTextFile: rdd转化为文本文件并保存

foreach: f作用于每个元素,常用于print

broadcast: 将变量分发/广播到各个任务上,书写".value"取其值

经验:

broadcast变量时妥善使用数据结构,比如set类型查找很快。相对于用list任务运行快很多。

参考资料:

https://spark.apache.org/docs/latest/rdd-programming-guide.html

https://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD

http://www.huaxiaozhuan.com/%E5%B7%A5%E5%85%B7/spark/chapters/02_rdd.html

spark sql: https://spark.apache.org/docs/latest/sql-programming-guide.html

spark常用算子总结的更多相关文章

  1. Spark常用算子-KeyValue数据类型的算子

    package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import or ...

  2. Spark常用算子-value数据类型的算子

    package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...

  3. java实现spark常用算子之Union

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  4. java实现spark常用算子之TakeSample

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  5. java实现spark常用算子之SortByKey

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...

  6. java实现spark常用算子之Sample

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  7. java实现spark常用算子之SaveAsTextFile

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  8. java实现spark常用算子之Repartitions

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  9. java实现spark常用算子之Reduce

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

随机推荐

  1. 常用Linux命令:ls/cd/pwd/mkdir/rm/mv/cp

    一.ls:列出目标目录中所有的子目录和文件 1.命令格式 ls [选项] [目录名] 2.常用参数 -a :列出目录下所有文件 -h :以容易理解的格式列出文件大小 -l  :除了文件名之外,还将文件 ...

  2. SpringMVC 配置式开发-HandlerMapping的执行流程(八)

    具体看这两块是怎么执行的 下图是实现了DispatcherServlet从HandleMapping获得处理器执行链的逻辑的源代码 下面是DispatcherServlet从HandleAdaptor ...

  3. 抽象类(abstract)【转】

    抽象类(abstract) abstract修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用abstract修饰符以指示某个类只能是其它类的基类.标记为抽象或包含在抽象类中的成员必须通 ...

  4. LINQ to SQL连接数据库及语句

    http://www.cnblogs.com/fengzheng126/archive/2012/04/20/2460620.html

  5. C#中IDisposable的用法-垃圾回收

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...

  6. c#打开关闭进程

    private const string FileName = "test.exe"; //进程名称不带扩展名 private const string ProcessName = ...

  7. HttpWebRequest,HttpWebResponse 使用

    目的:工作中已经两次使用了,特此记录一下,并写好注释 /// <summary> /// HttpWebRequest的基本配置 /// </summary> public c ...

  8. ssh 免密码远程登录

    背景: 公司有两台服务器A与B,经常会碰到代码中的配置文件不一致的情况...............,为了反面让两台服务器配置统一,所以需要写个shell脚本,用到的linux命令主要是scp 1.在 ...

  9. P4177 [CEOI2008]order 最小割

    \(\color{#0066ff}{ 题目描述 }\) 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成. 现在给 ...

  10. P4012 深海机器人问题

    \(\color{#0066ff}{题目描述}\) 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人 ...