map(func)

对数据集中的元素逐一处理,变为新的元素,但一个输入元素只能有一个输出元素

  1. scala> pairData.collect()
  2. res6: Array[Int] = Array(1, 2, 3, 4, 5)
  3. scala> val pairData = distData.map(a=>(a,1)).collect()
  4. res2: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))

flatMap(func)

类似与map,对数据集中的元素逐一处理,变为新的元素,但一个输入元素可以被映射为0或多个输出元素

  1. scala> val file = sc.textFile("/tmp/input")
  2. scala> file.collect()
  3. res11: Array[String] = Array("1 2 3 4 ", test hello world, 123 8997 876, hai bai du) // 每一行为一个元素
  4. scala> file.flatMap(a => a.split(" ")).collect()
  5. res12: Array[String] = Array(1, 2, 3, 4, test, hello, world, 123, 8997, 876, hai, bai, du)

filter(func)

对数据集中的元素注意处理,返回经过func函数计算后返回值为true的输入元素组成

  1. scala> pairData.collect()
  2. res7: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))
  3. scala> pairData.filter(r => r._1 == r._2).collect()
  4. res8: Array[(Int, Int)] = Array((1,1))

mapValues(func)

对数据集中的value进行逐个处理, 如RRD.mapValues(v => 1.0/20),将所有的value变为1.0/20

  1. scala> pairData.collect()
  2. res2: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))
  3. scala> pairData.mapValues( v=> 1.0/5 ).collect()
  4. res5: Array[(Int, Double)] = Array((1,0.2), (2,0.2), (3,0.2), (4,0.2), (5,0.2))

distinct()

返回一个包含源数据集中所有不重复元素的新数据集

  1. scala> val a = Array(1,1,3,3,4)
  2. a: Array[Int] = Array(1, 1, 3, 3, 4)
  3. scala> sc.parallelize(a).distinct().collect()
  4. res6: Array[Int] = Array(1, 3, 4)

groupByKey()

对相同key的数据进行group操作,在一个(K,V)对的数据集上调用,返回一个(K,Seq[V])对的数据集

  1. scala> pairData.collect()
  2. res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.groupByKey().collect()
  4. res9: Array[(Int, Seq[Int])] = Array((1,ArrayBuffer(1, 1)), (3,ArrayBuffer(1, 1)), (4,ArrayBuffer(1)))

reduceByKey(func)

使用指定的reduce函数,将相同key的值聚合到一起,并执行函数

  1. scala> pairData.collect()
  2. res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.reduceByKey(_+_).collect()
  4. res10: Array[(Int, Int)] = Array((1,2), (3,2), (4,1))

sortByKey([ascending], [numTasks])

  1. scala> pairData.collect()
  2. res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.sortByKey(false).collect
  4. res12: Array[(Int, Int)] = Array((4,1), (3,1), (3,1), (1,1), (1,1))

union(otherDataSet)

返回一个新的数据集,新数据集是由源数据集和参数数据集联合而成

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData2.collect()
  4. res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
  5. scala> pairData.union(pairData2).collect()
  6. res15: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1), (1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))

join(otherDataSet)

在类型为(K,V)和(K,W)类型的数据集上调用时,返回一个相同key对应的所有元素对在一起的(K, (V, W))数据集

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData2.collect()
  4. res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
  5. scala> pairData.distinct().join(pairData2.distinct()).collect()
  6. res18: Array[(Int, (Int, Int))] = Array((1,(1,1)), (3,(1,1)), (4,(1,1)))

cogroup(otherDataSet)

在类型为(K,V)和(K,W)的数据集上调用,返回一个 (K, Seq[V], Seq[W])元组的数据集

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData2.collect()
  4. res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
  5. scala> pairData.distinct().cogroup(pairData2.distinct()).collect()
  6. res19: Array[(Int, (Seq[Int], Seq[Int]))] = Array((5,(ArrayBuffer(),ArrayBuffer(1))), (6,(ArrayBuffer(),ArrayBuffer(1))), (1,(ArrayBuffer(1),ArrayBuffer(1))), (2,(ArrayBuffer(),ArrayBuffer(1))), (7,(ArrayBuffer(),ArrayBuffer(1))), (3,(ArrayBuffer(1),ArrayBuffer(1))), (4,(ArrayBuffer(1),ArrayBuffer(1))))

cartesian(otherDataSet)

笛卡尔积,在类型为 T 和 U 类型的数据集上调用时,返回一个 (T, U)对数据集(两两的元素对)

  1. scala> pairData.distinct().collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (3,1), (4,1))
  3. scala> pairData2.collect()
  4. res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
  5. scala> pairData.distinct().cartesian(pairData2).collect()
  6. res20: Array[((Int, Int), (Int, Int))] = Array(((3,1),(1,1)), ((3,1),(2,1)), ((3,1),(3,1)), ((3,1),(4,1)), ((3,1),(5,1)), ((3,1),(6,1)), ((3,1),(7,1)), ((4,1),(1,1)), ((4,1),(2,1)), ((4,1),(3,1)), ((4,1),(4,1)), ((4,1),(5,1)), ((4,1),(6,1)), ((4,1),(7,1)), ((1,1),(1,1)), ((1,1),(2,1)), ((1,1),(3,1)), ((1,1),(4,1)), ((1,1),(5,1)), ((1,1),(6,1)), ((1,1),(7,1)))

sample(withReplacement,fraction, seed)

返回一个数组,在数据集中随机采样num个元素组成,可以选择是否用随机数替换不足的部分,Seed用于指定的随机数生成器种子

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.sample(false, 0.2, 1)
  4. res34: Array[(Int, Int)] = Array((4,1))

reduce(func)

通过函数func(接受两个参数,返回一个参数)聚集数据集中的所有元素。

  1. scala> val c = Array(1, 2, 3, 4, 5)
  2. c: Array[Int] = Array(1, 2, 3, 4, 5)
  3. scala> sc.parallelize(c).reduce(_+_)
  4. res24: Int = 15

collect()

以数组的形式,返回数据集的所有元素

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))

count()

返回数据集的元素的个数

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.count()
  4. res29: Long = 5

first()

返回数据集中的第一个元素

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.first()
  4. res30: (Int, Int) = (1,1)

take(n)

返回一个由数据集的前n个元素组成的数组。

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.take(3)
  4. res31: Array[(Int, Int)] = Array((1,1), (1,1), (3,1))

takeSample(withReplacement,num, seed)

返回一个数组,在数据集中随机采样num个元素组成,可以选择是否用随机数替换不足的部分,Seed用于指定的随机数生成器种子

  1. scala> pairData.collect()
  2. res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
  3. scala> pairData.takeSample(false, 2, 1)
  4. res36: Array[(Int, Int)] = Array((3,1), (3,1))

countByKey()

返回一个(K,Int)对的Map,表示每一个key对应的元素个数

  1. scala> pairData.countByKey()
  2. res37: scala.collection.Map[Int,Long] = Map(3 -> 2, 4 -> 1, 1 -> 2)

saveAsTextFile(path)

将数据集的元素,以textfile的形式,保存到本地文件系统,HDFS或者任何其它hadoop支持的文件系统。

saveAsSequenceFile(path)

将数据集的元素,以Hadoop sequencefile的格式,保存到指定的目录下,本地系统,HDFS或者任何其它hadoop支持的文件系统。

foreach()

在数据集的每一个元素上,运行函数func进行更新。这通常用于边缘效果,例如更新一个累加器

  1. scala> val accum = sc.accumulator(0)
  2. scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
  3. scala> accum.value
  4. res47: Int = 10

Spark中的RDD操作简介的更多相关文章

  1. spark 中的RDD编程 -以下基于Java api

    1.RDD介绍:     RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...

  2. Spark_RDD之RDD操作简介

    1.转化操作 转化操作是返回一个新的RDD的操作,我们可以使用filter()方法进行转化.举个使用scala进行转化操作的例子. def main(args: Array[String]): Uni ...

  3. Spark中的RDD和DataFrame

    什么是DataFrame 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格. RDD和DataFrame的区别 DataFrame与RDD的主要区别在 ...

  4. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

  5. 浅谈大数据神器Spark中的RDD

    1.究竟什么是RDD呢? 有人可能会回答是:Resilient Distributed Dataset.没错,的确是如此.但是我们问这个实际上是想知道RDD到底是个什么东西?以及它到底能干嘛?好的,有 ...

  6. 关于ios中的文本操作-简介

    来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...

  7. spark中各种连接操作以及有用方法

    val a = sc.parallelize(Array(("123",4.0),("456",9.0),("789",9.0)) val ...

  8. Spark编程模型及RDD操作

    转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...

  9. Spark中的键值对操作-scala

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

随机推荐

  1. ASP.NET绑定控件语法

    1.DropDownList 前端代码aspx: <asp:DropDownList ID="ddl_meetingroom" runat="server" ...

  2. Netty5 + Protobuf 使用

    1. 安装开发环境 1.1 Netty环境 这里我使用Netty5.0.0版本 到这里下载即可http://netty.io/ 下载netty-all-5.0.0.Alpha2.jar 这个jar包简 ...

  3. Powerdesigner逆向工程从sql server数据库生成pdm (转载)

    第一步:打开"控制面板"中的"管理工具" 第二步:点击"管理工具"然后双击"数据源(odbc)" 第三步:打开之后,点击 ...

  4. win7左ctrl和左alt键互换

    主要参考这篇文章: http://xyztony1985.blog.163.com/blog/static/3611782011752420104/ 感谢原博主 Windows Registry Ed ...

  5. MVVMlight框架应用:Data Binding、Command

    常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的:在MVVMLight框架里,这里我们定 ...

  6. CentOS6部署VNC服务端

    VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Wi ...

  7. 利用react native创建一个天气APP

    我们将构建一个实列程序:天气App,(你可以在react native 中创建一个天气应用项目),我们将学习使用并结合可定义模板(stylesheets).盒式布局(flexbox).网络通信.用户输 ...

  8. Network - 工具列表

    Tcpdump homepage - tcpdump wiki - tcpdump Wireshark homepage - wireshark wiki - wireshark Fiddler ho ...

  9. 初涉SQL Server性能问题(2/4):列出等待资源的会话

    在初涉SQL Server性能问题(1/4)里,我们知道了如何快速检查服务器实例上正运行的任务数和IO等待的任务数.这个是轻量级的脚本,不会给服务器造成任何压力,即使服务器在高负荷下,也可以正常获得结 ...

  10. Team Foundation Server简介

    对于任何一个软件开发团队而言,成功的一个重要因素在于成员之间.成员与首先使用软件的用户之间有很好的沟通. Team Foundation Server是一个独立的服务器产品,逻辑上,由下列两层组成,这 ...