算子分为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. CLRMonitor - 跟踪CLR内部执行过程工具

    CLRMonitor v1.0.1511.13 点击此处下载 软件介绍:这款软件主要用于跟踪CLR内部执行过程,定位当前程序执行的命名空间以及方法名等信息.可以迅速找到被跟踪程序的当前执行方法名.本软 ...

  2. SDUT 3399 数据结构实验之排序二:交换排序

    数据结构实验之排序二:交换排序 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 冒泡排序和快 ...

  3. Nor Flash工作原理

    http://blog.chinaunix.net/uid-26876150-id-3723678.html Nor Flash 具有像内存一样的接口,它可以像内存一样读,却不可以像内存一样写,Nor ...

  4. 选择设置好ext3日志模式

    Linux是一种开放的.因Internet而产生的操作系统.Internet的发展.以网络为中心的计算模式如电子商务被迅速接受和普及,都为 Linux提供了更巨大的机会,使之成为企业和部门级的首选平台 ...

  5. html知识点归纳

    html部分 html头部声明 DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本.DOCTYPE声明必须放在每一个XHTML文档最顶部,在所 ...

  6. C#.Net使用正则表达式抓取百度百家文章列表

    工作之余,学习了一下正则表达式,鉴于实践是检验真理的唯一标准,于是便写了一个利用正则表达式抓取百度百家文章的例子,具体过程请看下面源码: 一:获取百度百家网页内容 public List<str ...

  7. 用Apache James 3.3.0 搭建个人邮箱服务器

    准备域名 比如域名为example.net,则邮箱格式为test@example.net.在自己的域名管理界面,添加一条A记录(mail.example.net  xxx.xxx.xxx.xxx),指 ...

  8. 禁用GridView控件前5行记录

    禁用GridView控件前5行记录. 应该在GridView控件写OnRowDataBound事件: 如果你只想禁用删除铵钮的话: 网页运行效果: 如果你想把整行禁用的话,可以这样写: 运行效果: 禁 ...

  9. C++日志模块实现的经验之谈

    以类的方式对日志模块进行封装,可创建一个单实例的接口或创建一个全局的日志对象指针,同时提供相应的对外写日志接口. 写日志的接口采用可变参数来建立,可使用va_list类型和##args参数,同时在写日 ...

  10. Glib之GObject简介(翻译)

    GObject GObject库是Glib库的动态类型系统实现,它实现了: 基于引用计数的内存管理 实例的构造和析构 通用的set/get的属性获取方法 简单易用的信号机制 对象实例化 所述g_obj ...