PySpark RDD操作

前提条件:

1、拥有Ubuntu16.04环境

2、Ubuntu下安装好Spark和PySpark

 

 

题目一:RDD创建

首先进入pyspark命令行

$ pyspark

(1)从文件中加载

从本地文件创建RDD
>>> lines = sc.textFile("file:///home/hadoop/data.txt")
>>> lines.collect()
从HDFS文件创建RDD
>>> lines1 = sc.textFile("hdfs://localhost:8020/user/hadoop/data.txt")
>>> lines1.collect()

(2)通过集合创建

>>> list = [1,2,3,4,5]
>>> rdd = sc.parallelize(list)
>>> rdd.collect()

 

题目二:熟悉RDD操作

查找相关资料,完成以下转换和动作操作的练习。

转换:

转换是懒加载,只作记录,不作计算,只有遇到动作操作时才真正触发计算。

1、map()

2、flatMap()

3、filter()

4、groupByKey()

5、reduceByKey()

6、sortByKey()

 

动作

1、count() 
2、collect()
3、first()
4、take(n)
5、reduce(func)
6、foreach(func)
7、saveAsTextFile(func)
 

题目三:RDD综合应用

1、随机一个文件生成10个人的年龄,第一个字段为ID,第二个字段为年龄,然后用RDD算出10个人的平均年龄

a、随机生成年龄

agegenerate.py

import random as rd

for i in range(10):
    num = rd.random()*100
    str1 = str(i) + " " + str(int(num))
    print(str1)

随机生成年龄结果如下

0 73
1 83
2 1
3 57
4 2
5 92
6 0
7 19
8 63
9 99

在Linux新建出一个age.txt文件,内容为以上随机生成年龄的结果。

b、RDD操作计算出平均年龄

由年龄文件生成rdd1
>>> rdd1 = sc.textFile("age.txt")
>>> rdd1.collect()
['0 73', '1 83', '2 1', '3 57', '4 2', '5 92', '6 0', '7 19', '8 63', '9 99']


RDD转换成(年龄,1)形式的RDD
>>> rdd2 = rdd1.map(lambda line : line.split(" ")).map(lambda x:(int(x[1]),1))
>>> rdd2.collect()
[(73, 1), (83, 1), (1, 1), (57, 1), (2, 1), (92, 1), (0, 1), (19, 1), (63, 1), (99, 1)]


计算年龄平均值(年龄的总和/年龄的个数)
>>> rdd2.keys().reduce(lambda x,y : x+y)/rdd2.values().count()
48.9

 

2、给定一组键值对(“spark”,3),(“hadoop”,6),(“hadoop”,4),(“spark”,5),key表示图书名称,value表示某天图书销量,请计算每种图书的每天平均销量。
结果是很显然是:(“spark”,4),(“hadoop”,5)

编程实现如下:

>>> rdd = sc.parallelize([("spark",2),("hadoop",6),("hadoop",4),("spark",6)])
>>> rdd.mapValues(lambda x : (x,1)).reduceByKey(lambda x,y : (x[0]+y[0],x[1] + y[1])).mapValues(lambda x : (x[0] / x[1])).collect()

第2题内容来源于:http://dblab.xmu.edu.cn/blog/1706-2/,详细解析可参考来源链接。

 

题目四:RDD持久化

持久化:持久化后的RDD不需要重新计算,直接读取缓存中的数据,加快计算过程

RDD 可以使用 persist() 方法或 cache() 方法进行持久化。用unpersist()方法将持久化的RDD从缓存中移除。

>>> rdd = sc.parallelize(["b", "a", "c"])
>>> rdd.persist()
ParallelCollectionRDD[2] at parallelize at PythonRDD.scala:194
>>> rdd.is_cached
True

持久化后可通过浏览器监控页面(4040端口)查看持久化情况。 注意:该过程可能会延时一段时间才出来。

 

去持久化:RDD使用unpersist()方法来去持久化

>>> rdd.unpersist()
>>> rdd.is_cached
False

 

完成!enjoy it!

PySpark RDD是一种分布式的数据集,它是PySpark的核心抽象之一。RDD代表弹性分布式数据集(Resilient Distributed Dataset),它是由一系列分区组成的可并行处理的集合。RDD可以包含任何类型的对象,并且可以在集群上进行并行操作PySpark RDD可以通过不同的方式创建,其中一种常见的方式是使用`sc.parallelize`方法,该方法可以将Python列表、NumPy数组或Pandas Series/Pandas DataFrame转换为Spark RDD。例如,通过以下代码可以使用列表创建一个RDD: ```python rdd = sc.parallelize([1, 2, 3, 4, 5]) ``` 这将创建一个名为`rdd`的RDD对象,其中包含了列表中的元素。RDD支持各种转换和操作,例如映射、过滤、排序和聚合等。你可以使用这些操作来对RDD进行变换和计算,最终得到你想要的结果。 PySpark提供了丰富的文档来帮助你了解RDD的更多细节和使用方法。你可以参考Spark官方网站的RDD编程指南和PySpark官方文档,它们提供了详细的介绍和示例代码,帮助你更好地理解和使用PySpark RDD。 总结起来,PySpark RDD是一种分布式的可并行处理的数据集,它可以通过不同的方式创建,例如使用`sc.parallelize`方法。RDD支持各种转换和操作,它是PySpark中非常重要的概念之一。 参考文献: Spark官方网站 - RDD编程指南:http://spark.apache.org/docs/latest/rdd-programming-guide.html PySpark官方文档:https://spark.apache.org/docs/latest/api/python/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值