PySpark入门四:常用函数(下)

leftOuterJoin()、join()、intersection()

leftOuterJoin() 与pandas中的merge() 外连接方法功能相似。根据两个RDD中都有的值来连接,并返回RDD记录。当然这也是一个高开销的方法,需要谨慎使用。
join()与内连接方法相似、intersection()查找两个RDD相等的元素。

# 定义两个RDD 并连接
rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3)])
rdd2 = sc.parallelize([('a', 1), ('b', 2), ('d', 3)])
rdd3 = rdd1.leftOuterJoin(rdd2)
# 打印结果数据
rdd3.collect()
# [('a', (1, 1)), ('b', (2, 2)), ('c', (3, None))]
# 内连接
rdd1 = sc.parallelize([('a', 1), ('b', 2), ('c', 3)])
rdd2 = sc.parallelize([('a', 1), ('b', 3), ('d', 3)])
rdd4 = rdd1.join(rdd2)
rdd4.collect()

# [('a', (1, 1)), ('b', (2, 3))]
# 相等
rdd5 = rdd1.intersection(rdd2)
rdd5.collect()

# [('a', 1)]

以上的结果通过对比是显而易见的。

repartition()

repartition() 重新对数据进行了分区,改变了数据集分区的数量,重组数据对性能影响较大

rdd1 = rdd1.repartition(4)
len(rdd1.glom().collect()) # glom() 产生一个列表,其中每个元素是指定分区中数据集的所有元素的另一个列表
# 4

take()/takeSample()

df = data.take(10) # 指定返回的行数

# 获取随机记录 takeSample()
# 参数: 1. 样本是否应该被替换 2. 指定返回的数量 3. 伪随机数发生器的种子
df = data.takeSample(False, 2, 300)

collect()

collect() 将RDD数据返回给驱动程序,类似于print()

reduce()

reduce() 方法可以减少RDD中的元素,可以使用这个方法计算RDD中的元素总数

rdd1.map(lambda row:row[1]).reduce(lambda x, y: x+y)

count()

count() 方法统计RDD里的元素数量

saveAsTextFile()

saveAsTextFile() 和pandas中的to_excel() 方法相似,将文件保存到本地

foreach()

foreach() 用迭代的方式对RDD中每一个元素应用相同的函数


版权声明:本文为weixin_43790705原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。