spark学习(2)---RDD
一、打印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的更多相关文章
- Spark学习之RDD编程(2)
Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...
- Spark学习之RDD
RDD概述 什么是RDD RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合 ...
- Spark学习之RDD编程总结
Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...
- Spark学习笔记——RDD编程
1.RDD——弹性分布式数据集(Resilient Distributed Dataset) RDD是一个分布式的元素集合,在Spark中,对数据的操作就是创建RDD.转换已有的RDD和调用RDD操作 ...
- spark学习(10)-RDD的介绍和常用算子
RDD(弹性分布式数据集,里面并不存储真正要计算的数据,你对RDD的操作,他会在Driver端转换成Task,下发到Executor计算分散在多台集群上的数据) RDD是一个代理,你对代理进行操作,他 ...
- Spark学习之RDD的理解
转自:http://www.infoq.com/cn/articles/spark-core-rdd/ 感谢张逸老师的无私分享 RDD,全称为Resilient Distributed Dataset ...
- spark 学习(二) RDD及共享变量
声明:本文基于spark的programming guide,并融合自己的相关理解整理而成 Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...
- spark学习(RDD案例实战)
练习0(并行化创建RDD) 先启动spark-shell 通过并行化生成rdd scala> val rdd1 = sc.parallelize(List(63,45,89,23,144,777 ...
- Spark学习(2) RDD编程
什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.弹性.里面的元素可并行计算的集合 RDD允 ...
- Spark学习摘记 —— RDD行动操作API归纳
本文参考 参考<Spark快速大数据分析>动物书中的第三章"RDD编程",前一篇文章已经概述了转化操作相关的API,本文再介绍行动操作API 和转化操作API不同的是, ...
随机推荐
- 同步 Github fork 分支
/**************************************************************************** * 同步 Github fork 分支 * ...
- OAuth学习总结
1.为什么需要OAuth? 新浪微博就是你的家.偶尔你会想让一些人(第三方应用)去你的家里帮你做一些事,或取点东西.你可以复制一把钥匙(用户名和密码)给他们,但这里有三个问题: 1)别人拿了钥匙后可以 ...
- bzoj 3714 [ PA 2014 ] Kuglarz —— 思路+最小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球: 询问一段区间,等于知道一 ...
- charCode 表示空格 实现中文对齐
字符以及HTML实体 描述以及说明 这是我们使用最多的空格,也就是按下space键产生的空格.在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个).要使用html实体表示才可累 ...
- c++性能测试工具:google benchmark入门(二)
上一篇中我们初步体验了google benchmark的使用,在本文中我们将更进一步深入了解google benchmark的常用方法. 本文索引 向测试用例传递参数 简化多个类似测试用例的生成 使用 ...
- P3398 仓鼠找sugar 又一次血的教训
做什么题都要注意数组的大小,不要犯下数组越界的错误(温馨(狠心)提示): 做了好多遍就是不对,原来是[20]的数组,在for下循环1——>20,神奇爆零: 链接:https://www.luog ...
- Linux系统挂载NTFS文件系统(转载)
转自:http://hermesbox.blogbus.com/logs/47386987.html 今天尝试并成功的将一块500G的移动硬盘挂载到了RHEL5的系统上,甚感欣慰.想到也许以后自己或其 ...
- 软件项目功能测试框架(转载自51Testing软件测试)
测试用例的编写需要按照一定的思路进行,而不是想到哪写到哪,一般测试机制成熟的公司都会有公司自己自定义的测试用例模板,以及一整套的测试流程关注点,当然我们自己在测试生涯中也应当积累一套自己的测试框架,所 ...
- SpringMVC异步调用,Callable和DeferredResult的使用
Callable和DeferredResult都是springMVC里面的异步调用,Callable主要用来处理一些简单的逻辑,DeferredResult主要用于处理一些复杂逻辑 1.Callabl ...
- WCF、WebAPI、WebService之间的区别
Web Service 1.它是基于SOAP协议的,数据格式是XML 2.只支持HTTP协议 3.它不是开源的,但可以被任意一个了解XML的人使用 4.它只能部署在IIS上 WCF 1.这个也是基于S ...