PySpark RDD 之collect、 take、top、first取值操作

1. pyspark 版本

       2.3.0版本

 

2. collect()

collect()[source]

Return a list that contains all of the elements in this RDD.

中文:返回包含此RDD中的所有元素的列表。

Note This method should only be used if the resulting array is expected to be small, as all the data is loaded into the driver’s memory.

中文注解: 注意,这个方法应该只在预期得到的数组很小的情况下使用,因为所有的数据都加载到驱动程序的内存中。

案列:

from pyspark import SparkContext, SparkConf
conf = SparkConf().setMaster("local").setAppName("quzhi")
sc = SparkContext(conf=conf)
lines1 = sc.parallelize(list(range(10)))
print('lines1= ', lines1.collect())

>>> lines1=  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

3. take

take(num)[source]

Take the first num elements of the RDD.

It works by first scanning one partition, and use the results from that partition to estimate the number of additional partitions needed to satisfy the limit.

Translated from the Scala implementation in RDD#take().

中文: 取RDD的前num个元素。

            它的工作方式是先扫描一个分区,然后使用该分区的结果来估算满足限制所需的其他分区的数量。

            从RDD#take()中的Scala实现翻译而来。

Note this method should only be used if the resulting array is expected to be small, as all the data is loaded into the driver’s memory.

中文:注意 仅当预期结果数组较小时才应使用此方法,因为所有数据均已加载到驱动程序的内存中。

>>> sc.parallelize([2, 3, 4, 5, 6]).cache().take(2)
[2, 3]
>>> sc.parallelize([2, 3, 4, 5, 6]).take(10)
[2, 3, 4, 5, 6]
>>> sc.parallelize(range(100), 100).filter(lambda x: x > 90).take(3)
[91, 92, 93]

案列:

# take: 从rdd中返回前n个元素
print('take(2)= ', lines1.take(2)) 

>>> take(2)=  [0, 1]

 

4. top

top(numkey=None)[source]

Get the top N elements from an RDD.

中文: 

 

Note This method should only be used if the resulting array is expected to be small, as all the data is loaded into the driver’s memory.
中文: 注意 仅当预期结果数组较小时才应使用此方法,因为所有数据均已加载到驱动程序的内存中。


Note It returns the list sorted in descending order.
注意 它返回以降序排序的列表。


>>> sc.parallelize([10, 4, 2, 12, 3]).top(1)
[12]
>>> sc.parallelize([2, 3, 4, 5, 6], 2).top(2)
[6, 5]
>>> sc.parallelize([10, 4, 2, 12, 3]).top(3, key=str)
[4, 3, 2]

案列:

# top(num)返回最前面的两个元素
lines2 = sc.parallelize(list(range(0, 10))[::-1])
print('lines2= ', lines2.collect())
print('lines1.top(2)= ', lines1.top(2))
print('lines2.top(2)= ', lines2.top(2))

>>>lines2=  [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>lines1.top(2)=  [9, 8]
>>>lines2.top(2)=  [9, 8]

 

5. first

first()[source]

Return the first element in this RDD.

中文: 返回此RDD中的第一个元素。

>>> sc.parallelize([2, 3, 4]).first()
2
>>> sc.parallelize([]).first()
Traceback (most recent call last):
    ...
ValueError: RDD is empty

案列

# first() 从RDD中返回第一个元素
print('lines1.first()= ', lines1.first())
print('lines2.first()= ', lines2.first())

>>>lines1.first()=  0
>>>lines2.first()=  9

 

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、付费专栏及课程。

余额充值