一、打印RDD内容

https://blog.csdn.net/wengyupeng/article/details/52808503

1、方法

2种方式:

1              rdd.collect().foreach {println}
2 rdd.take(10).foreach { println } //take(10) 取前10个

2、例子

     val logData = sparkcontext.textFile(logFile, 2).cache()    

     logData.collect().foreach {println}
logData.take(10).foreach { println }

二、Spark RDD Key-Value基本转换和动作运算实例

https://blog.csdn.net/qq_25948717/article/details/81913523

创建Key-Value RDD

kvRDD1 = sc.parallelize([(3,6),(6,9),(3,4),(5,6),(1,2)])

转换:取key和value

>>> kvRDD1.collect()
[(3, 6), (6, 9), (3, 4), (5, 6), (1, 2)]
>>> kvRDD1.keys().collect()
[3, 6, 3, 5, 1]
>>> kvRDD1.values().collect()
[6, 9, 4, 6, 2]

filter:

>>> kvRDD1.filter(lambda keyValue:keyValue[0]<5).collect()
[(3, 6), (3, 4), (1, 2)]
>>> kvRDD1.filter(lambda keyValue:keyValue[1]<5).collect()
[(3, 4), (1, 2)]

mapValues:针对RDD每一组(Key,Value)进行运算

>>> kvRDD1.mapValues(lambda x:x**2).collect()
[(3, 36), (6, 81), (3, 16), (5, 36), (1, 4)]

sortByKey:默认从小到大按照key排序

>>> kvRDD1.sortByKey(ascending=True).collect()
[(1, 2), (3, 6), (3, 4), (5, 6), (6, 9)]

reduceByKey():按照key值进行reduce运算,将相同的key的value相加

>>> kvRDD1.reduceByKey(lambda x,y:x+y).collect()
[(5, 6), (1, 2), (6, 9), (3, 10)]
多个RDD Key-Value转换运算

>>> kvRDD2 = sc.parallelize([(3,6),(3,8),(6,12)])
>>> kvRDD1 = sc.parallelize([(3,6),(6,9),(3,4),(5,6),(1,2)])

jion:将两个RDD按照相同的key值jion起来

>>> kvRDD1.join(kvRDD2).collect()
[(3, (6, 6)), (3, (6, 8)), (3, (4, 6)), (3, (4, 8)), (6, (9, 12))]

leftOuterJoin:如何左边的key值在右边中没有,那么join时value就显示None

>>> kvRDD1.leftOuterJoin(kvRDD2).collect()
[(1, (2, None)), (3, (6, 6)), (3, (6, 8)), (3, (4, 6)), (3, (4, 8)), (5, (6, None)), (6, (9, 12))]

>>> kvRDD1.rightOuterJoin(kvRDD2).collect()
[(3, (6, 6)), (3, (6, 8)), (3, (4, 6)), (3, (4, 8)), (6, (9, 12))]

subtractByKey:删除相同key的数据

>>> kvRDD1.subtractByKey(kvRDD2).collect()
[(1, 2), (5, 6)]
Key-Value动作运算

>>> kvRDD1.first()
(3, 6)
>>> kvRDD1.take(3)
[(3, 6), (6, 9), (3, 4)]
>>> kvRDD1.first()[0]
3
>>> kvRDD1.first()[1]
6
>>> kvRDD1.countByKey()
defaultdict(<class 'int'>, {3: 2, 6: 1, 5: 1, 1: 1})

查看key值得value有那些?

>>> kvRDD1.lookup(3)
[6, 4]

三、RDD与dataframe的转换

https://blog.csdn.net/lxhandlbb/article/details/52367605

DataFrame是一个带有列名的分布式数据集合。等同于一张关系型数据库中的表或者R/Python中的data frame,不过在底层做了很多优化;我们可以使用结构化数据文件、Hive tables,外部数据库或者RDDS来构造DataFrames。
一、利用反射推断Schema

Spark SQL能够将含Row对象的RDD转换成DataFrame,并推断数据类型。通过将一个键值对(key/value)列表作为kwargs传给Row类来构造Rows。key定义了表的列名,类型通过看第一列数据来推断。(所以这里RDD的第一列数据不能有缺失)未来版本中将会通过看更多数据来推断数据类型,像现在对JSON文件的处理一样。
二、编程指定Schema

通过编程指定Schema需要3步:

1.从原来的RDD创建一个元祖或列表的RDD。
2.用StructType 创建一个和步骤一中创建的RDD中元祖或列表的结构相匹配的Schema。
3.通过SQLContext提供的createDataFrame方法将schema 应用到RDD上。

spark学习(2)---RDD的更多相关文章

  1. Spark学习之RDD编程(2)

    Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...

  2. Spark学习之RDD

    RDD概述 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合 ...

  3. Spark学习之RDD编程总结

    Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...

  4. Spark学习笔记——RDD编程

    1.RDD——弹性分布式数据集(Resilient Distributed Dataset) RDD是一个分布式的元素集合,在Spark中,对数据的操作就是创建RDD.转换已有的RDD和调用RDD操作 ...

  5. spark学习(10)-RDD的介绍和常用算子

    RDD(弹性分布式数据集,里面并不存储真正要计算的数据,你对RDD的操作,他会在Driver端转换成Task,下发到Executor计算分散在多台集群上的数据) RDD是一个代理,你对代理进行操作,他 ...

  6. Spark学习之RDD的理解

    转自:http://www.infoq.com/cn/articles/spark-core-rdd/ 感谢张逸老师的无私分享 RDD,全称为Resilient Distributed Dataset ...

  7. spark 学习(二) RDD及共享变量

    声明:本文基于spark的programming guide,并融合自己的相关理解整理而成      Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...

  8. spark学习(RDD案例实战)

    练习0(并行化创建RDD) 先启动spark-shell 通过并行化生成rdd scala> val rdd1 = sc.parallelize(List(63,45,89,23,144,777 ...

  9. Spark学习(2) RDD编程

    什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.弹性.里面的元素可并行计算的集合 RDD允 ...

  10. Spark学习摘记 —— RDD行动操作API归纳

    本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...

随机推荐

  1. 浅入分析和Linux内核相关的文件夹/proc和/sys .

    近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了9次...如果您真的觉得我的文章很烂,请告诉我原因,不胜感激. 这星期,马哥讲了关于Linux ...

  2. 关于ArcGis for javascrept查询ArcGis server图层信息的方式

    方式一: queryTask方式: 该方式用于单个图层的条件查询(不能跨图层查询) 1. 创建query对象 query = new esri.tasks.Query(); 2. 给query对象设置 ...

  3. jquery 插件2014

    jquery Plugins:http://plugins.jquery.com/ Amazon Side Bar Menu http://plugins.jquery.com/amazonsideb ...

  4. ==和equals()的不同点

    两者都可以用于对象的比较."=="用于比较两个对象的内存地址值(引用值)是否相等,equals()方法用于比较两个对象的内容是否一致. String str1 = new Stri ...

  5. [App Store Connect帮助]八、维护您的 App(4.2)查看评分与评论

    您可以查看 App 的总评分或单个顾客评论.如有必要,您可以针对某条评论报告问题. [注]顾客可以为您的 iOS 和 macOS App 评分并撰写评论,但只能为 Apple TVOS App 评分. ...

  6. Code:Blocks 中文乱码问题原因分析和解决方法

    下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...

  7. centos7静态网络配置

    centos7静态网络配置 cd /etc/sysconfig/network-scripts 找到当前网卡名字 vim ifcfg-ens33 TYPE="Ethernet" # ...

  8. [Usaco2012 Open]Balanced Cow Subsets

    Description Farmer John's owns N cows (2 <= N <= 20), where cow i produces M(i) units of milk ...

  9. _bzoj1007 [HNOI2008]水平可见直线【单调栈】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1007 按斜率排序,去掉斜率相同时,截距较小的直线(即只保留该斜率下截距最大的直线).若当前直 ...

  10. Jewel Magic UVA - 11996 || bzoj1014: [JSOI2008]火星人prefix

    Jewel Magic UVA - 11996 这是一道用splay/非旋treap做的题(这里用的是非旋treap) 1/2/3是splay/非旋treap的常规操作.对于操作4,可以用哈希法求LC ...