Spark中rdd依赖以及sparksql

本文阐述了Spark中RDD的依赖特性,包括不同类型依赖,DAG图在任务调度中的应用,以及DataFrame与RDD的相互转换,以优化并行计算性能。
摘要由CSDN通过智能技术生成

Rdd依赖

概念

  • rdd的特性之一
  • 相邻rdd之间存在依赖关系

分类

  • 窄依赖

    ​ 父rdd的一个分区数据对应子rdd的一个分区数,一对一关系

    ​ map()/flatmap()/filter

  • 宽依赖

    ​ 父rdd的一个分区数据对应子rdd的多个分区数据,一对多关系

    ​ groupby()/groupbykey()/sortby()/sortbykey()/distinc(),reducebykey()/

DAG图计算

  • dag图(有方向没有闭环的图像)是来管理rdd之间的依赖关系
  • dag图根据rdd的依赖关系划分不同的stage(计算步骤)
  • spark应用程序遇到宽依赖就会产生新的stage
  • 同一个stage中的rdd之间一定是窄依赖关系

为什么要划分stage计算步骤

  • 因为spark的task任务是以线程方式并行计算
  • 线程方式并行计算会有资源竞争问题,所以会导致数据丢失造成计算结果不准确
  • 通过stage来解决计算不准确问题
    • 同一个stage中数据不会进行shuffle过程,多个task并行计算
    • 不同stage之间需要等待上一个stage执行完成后(获取所有数据)再执行下一个stage(因为如果不等待的话,会造成数据不准确问题)

df对象和rdd对象的转换

from pyspark.sql import SparkSession
ss=SparkSession.builder.getOrCreate()
sc=ss.sparkContext

rdd1=sc.parallelize([[1,'xiuer',20]])
df1=rdd1.toDF(['id','name','age'])
df1.show()
new_rdd=df1.rdd
rdd_map=new_rdd.map(lambda x:x['age'])
print(rdd_map.collect())
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值