在RDD、DataFrame和DataSet之间怎么选?

先来介绍一下spark中的RDD、DataFrame和DataSet:

RDD(弹性分布式数据集)数据元素的不可变的分布式集合,在集群中的节点之间进行分区,可以与提供转换和操作的低水平的API并行操作。

DataFrame是一个不可变的分布式数据集合。与RDD不同,数据被组织成命名列,就像关系数据库中的表,为了使大数据集处理变得更加容易,DataFrame允许开发人员将结构强加于分布式数据集合,从而可以使用更高层次的抽象; 它提供了一个API来操纵您的分布式数据; 可以使得不懂编程的人也可以使用。

DataFrame和Dataset API构建在Spark SQL引擎之上,所以它使用Catalyst来生成优化的逻辑和物理查询计划。通过R,Java,Scala或Python DataFrame / Dataset API,所有关系类型查询都经历相同的代码优化器,提供空间和速度效率。而数据集[T]类型的API针对数据工程任务进行了优化,untyped Dataset[Row](DataFrame的别名)更快,适合交互式分析。

如果您需要丰富的语义,高级抽象和域特定的API,请使用DataFrame或Dataset。

如果您的处理需要高层次表达式  filters, maps, aggregation, averages, sum, SQL queries, columnar access和对半结构化数据使用lambda函数,请使用DataFrame或Dataset。

如果要在编译时要求更高程度的类型安全性,则需要类型化的JVM对象,利用Catalyst优化,并从Tungsten的高效代码生成中受益,使用Dataset。

如果要在Spark Libraries之间统一和简化API,请使用DataFrame或Dataset。

这些情况下建议使用RDD:

数据是非结构化的时候,例如 :media streams or streams of text

使用功能编程构造来操纵您的数据而不是域特定表达式时;

放弃针对结构化和半结构化数据的DataFrames和Datasets提供的一些优化和性能时。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值