Pyspark学习笔记(五)RDD操作(一)_RDD转换操作

在这里插入图片描述

Pyspark学习笔记(五)RDD操作(一)_RDD转换操作


前言

提示:本篇博客讲的是RDD的操作中的转换操作,即 RDD Transformations

主要参考链接:

1.PySpark RDD Transformations with examples
2.Apache spark python api

一、PySpark RDD 转换操作简介

    PySpark RDD 转换操作(Transformation) 是惰性求值,用于将一个 RDD 转换/更新为另一个。
由于RDD本质上是不可变的,转换操作总是创建一个或多个新的RDD而不更新现有的RDD,因此,一系列RDD转换创建了一个RDD谱系。
RDD LINEAGE

1.窄操作

    这些计算数据存在于单个分区上,这意味着分区之间不会有任何数据移动。
NARROW-transformation

常见的执行窄操作的一般有:map()mapPartition()flatMap()filter()union()

2.宽操作

    这些计算数据存在于许多分区上,这意味着分区之间将有数据移动以执行更广泛的转换。由于这些对数据进行混洗,因此它们也称为混洗转换,所以与窄操作相比,是更加昂贵的操作。

常见的执行宽操作的一些方法是:groupBy(), groupByKey(), join(), repartition()
wider-transformation

二.常见的转换操作表 & 使用例子

0.创建一个示例rdd, 后续的例子基本以此例展开

data_list = [ ((10,1,2,3), (10,1,2,4), (10,1,2,4), (20,2,2,2), (20,1,2,3)) ]
# 注意该列表中包含有两层tuple嵌套,相当于列表中的元素是一个 (5,4) 二维的tuple

rdd_test = spark.sparkContext.parallelize(data_list)
print("rdd_test:\n", rdd_test.collect())

则输出为:

[ ((10,1,2,3), (10,1,2,4), (10,1,2,4), (20,2,2,2), (20,1,2,3)) ]

1.map(<func>)

是所有转换操作中最基本的。
它应用一个具名函数或者匿名函数,对数据集内的所有元素执行同一操作
pyspark.RDD.map

# the example of map
rdd_map_test = rdd_test.map(lambda x: (x[0], x[3]))
print("rdd_map_test\n", rdd_map_test.collect())

相当于只从第一层 tuple 中取出了第0和第3个 子tuple, 输出为:

[((10,1,2,3), 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值