Spark中RDD的常用操作(Python)

弹性分布式数据集(RDD)

Spark是以RDD概念为中心运行的。RDD是一个容错的、可以被并行操作的元素集合。创建一个RDD有两个方法:在你的驱动程序中并行化一个已经存在的集合;从外部存储系统中引用一个数据集。RDD的一大特性是分布式存储,分布式存储在最大的好处是可以让数据在不同工作节点并行存储,以便在需要数据时并行运算。弹性指其在节点存储时,既可以使用内存,也可已使用外存,为使用者进行大数据处理提供方便。除此之外,RDD的另一大特性是延迟计算,即一个完整的RDD运行任务被分为两部分:Transformation和Action

1.Transformation

Transformation用于对RDD的创建,RDD只能使用Transformation创建,同时还提供大量操作方法,包括map,filter,groupBy,join等,RDD利用这些操作生成新的RDD,但是需要注意,无论多少次Transformation,在RDD中真正数据计算Action之前都不可能真正运行。

2.Action

Action是数据执行部分,其通过执行count,reduce,collect等方法真正执行数据的计算部分。实际上,RDD中所有的操作都是Lazy模式进行,运行在编译中不会立即计算最终结果,而是记住所有操作步骤和方法,只有显示的遇到启动命令才执行。这样做的好处在于大部分前期工作在Transformation时已经完成,当Action工作时,只需要利用全部自由完成业务的核心工作。

下面是在python中对RDD的生成,以及一些基本的Transformation,Action操作。



# -*- coding:utf-8 -*-
from pyspark import SparkContext, SparkConf
from pyspark.streaming import StreamingContext
import math
appName ="jhl_spark_1" #你的应用程序名称
master= "local"#设置单机
conf = SparkConf().setAppName(appName).setMaster(master)#配置SparkContext
sc = SparkContext(conf=conf)

# parallelize:并行化数据,转化为RDD
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data, numSlices=10)  # numSlices为分块数目,根据集群数进行分块

# textFile读取外部数据
rdd = sc.textFile("./c2.txt")  # 以行为单位读取外部文件,并转化为RDD
print rdd.collect()

# map:迭代,对数据集中数据进行单独操作
def my_add(l):
    return (l,l)
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)  # 并行化数据集
result = distData.map(my_add)
print (result.collect())  # 返回一个分布数据集

# filter:过滤数据
def my_add(l):
    result = False
    if l > 2:
        result = True
    return result
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)#并行化数据集,分片
result = distData.filter(my_add)
print (result.collect())#返回一个分布数据集

# zip:将两个RDD对应元素组合为元组
x = sc.parallelize(range(0,5))
y = sc.parallelize(range(1000, 1005))
print x.zip(y).collect()

#union 组合两个RDD
print x.union(x).collect()
# Aciton操作

# collect:返回RDD中的数据
rdd = sc.parallelize(range(1, 10))
print rdd
print rdd.collect()

# collectAsMap:以rdd元素为元组,以元组中一个元素作为索引返回RDD中的数据
m = sc.parallelize([(‘a‘, 2), (3, 4)]).collectAsMap()
print m[‘a‘]
print m[3]

# groupby函数:根据提供的方法为RDD分组:
rdd = sc.parallelize([1, 1, 2, 3, 5, 8])
def fun(i):
    return i % 2
result = rdd.groupBy(fun).collect()
print [(x, sorted(y)) for (x, y) in result]

# reduce:对数据集进行运算
rdd = sc.parallelize(range(1, 10))
result = rdd.reduce(lambda a, b: a + b)
print result

  

 除上述以外,对RDD还存在一些常见数据操作如:

name()返回rdd的名称

min()返回rdd中的最小值

sum()叠加rdd中所有元素

take(n)取rdd中前n个元素

count()返回rdd的元素个数

更多操作请参考 :http://spark.apache.org/docs/latest/api/python/index.html

时间: 2024-10-17 00:29:20

Spark中RDD的常用操作(Python)的相关文章

putty中的一些常用操作

(和Linux中操作差不多s) 删除目录 rm -rf /home/apache-tomcat-8.0.9 就会把home下的apache-tomcat-8.0.9文件夹给删除了 删除文件 rm -f /home/apache-tomcat-8.0.9.tar.gz 就会把home下的apache-tomcat-8.0.9.tar.gz文件给删除了 进入目录 cd home 返回上一层目录 cd .. 查看当前目录下的文件 lsputty中的一些常用操作

【转】centOS中mysql一些常用操作

安装mysql yum -y install mysql-server 修改mysql配置vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记暂时修改一下编码(添加在密码下方): default-character-set = utf8 设置mysql随系统启动# chkconfig mysqld on ← 设置MySQL服务随系统启动自启动# chkconfig --list mysqld ← 确认MySQL自启动mysqld 0:off 1:off 2:on 3:o

.NET中DataTable的常用操作

一.目的 在各种.NET开发中,DataTable都是一个非常常见且重要的类型,在与数据打交道的过程中可以说是必不可少的对象. 它功能强大,属性与功能也是相当丰富,用好的话,使我们在处理数据时,减少很多工作量,且提高工作效率.它丰富的功能帮助我们解决很多问题的同时,也增加了记忆的难度,之前学习且记住的方法,一段时间没用到就会忘记,等再需要用到它时,有需要进行百度或谷歌,比较浪费时间.因此,这里将各种常用场景下的DataTable操作记录下来,一是容易回顾学习,二是方便工作时查阅. 但时,因为经验

python中字符串的常用操作

目的:熟练使用不同的容器或函数操作字符串,这里只介绍常用的方法. 环境:windows 7 python 3.5.3  或 ubuntu 16.04 python 3.5.2 情景:初学python接触最多的数据应该就是字符串了,处理最多的也是,熟练一些函数和方法,可以更有效率的完成想要的操作,这里只介绍处理字符串常用的一些方法. 字符串的存储: 这里的储存是更直白的说明,专业的应该是指向吧(指向确实更合理),如果不方便理解所以就暂时理解为储存吧,需要专业解释可以查看官发文档. 类型有:字符.列

python中列表类型常用操作

列表是个在写测试用例时经常被用到的类型,我们来看下列表常用的一些操作吧. 1. 分片 作用:提取列表中的一部分元素出来(分片在测试的时候也经常会用到) 这里的a[1:4]指取从a这个列表的下标为1的索引开始(即第二个元素),到下标为3的索引的元素,即为[2,3,4] 分片有很多种简写:第一个等于a[0:4],第二个等于a[4:7] 其实我们还可以加步长,比如:0:4本来输出的是[1,2,3,4],但加了步长为2,就输出为[1,3] 2. 列表相加与乘法 两个列表相加得到一个相加后的列表相加比较简

Python中列表的常用操作

只整理重要常用的操作: append():尾部追加元素,参数只能为一个. extend():用列表扩展列表,参数为列表. insert():在指定位置插入元素,第一个参数为插入位置,第二个为参数为插入元素. index():获取指定元素的索引,若参数只用元素,返回出现第一次的索引:index(num,i)返回从索引i开始的第一次出现num的索引. remove():删除指定元素,参数为被删元素,只删除第一个出现的. del list[i]:删除list的第i的元素.若del list 则list

centOS中mysql一些常用操作

安装mysqlyum -y install mysql-server 修改mysql配置vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记暂时修改一下编码(添加在密码下方): default-character-set = utf8 设置mysql随系统启动# chkconfig mysqld on ← 设置MySQL服务随系统启动自启动# chkconfig --list mysqld ← 确认MySQL自启动mysqld 0:off 1:off 2:on 3:on

selenium中鼠标的常用操作

selenium自动化中,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件——ActionChains. ActionChains类鼠标操作的常用方法: context_click() 右击 double_click() 双击 drag_and_drop() 拖动 move_to_element() 鼠标悬浮在一个元素上 click_and_hold() 按下鼠标左键在一个元素上不松开 在使用ActionCha

java中的redis常用操作

常规操作 public class TestReidsCommon { ? public static void main(String[] args) { // 创建连接 Jedis jedis = new Jedis("192.168.120.129", 6379); // 设置密码 如果没有密码可以不设置 jedis.auth("123456"); // key Set<String> keys = jedis.keys("*"