• Spark中的RDD和DataFrame


    什么是DataFrame

    在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。

    RDD和DataFrame的区别

    DataFrame与RDD的主要区别在于,DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。

    RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。 DataFrame底层是以RDD为基础的分布式数据集,和RDD的主要区别的是:RDD中没有schema信息,而DataFrame中数据每一行都包含schema

    DataFrame = RDD[Row] + shcema

    RDD转DataFrame原因及方式

    可以将RDD转成DataFrame之后,借用sparksql和sql以及HQL语句快速方便的使用sql语句统计和查询,比如说分组排名(row_number() over()) 分析函数和窗口函数去实现占比分析。

    将RDD转化为DataFrame有两种方式:

    方式一:通过反射推断schema 要求:RDD的元素类型必须是case class

    方式二、编程指定schema 要求:RDD的元素类型必须是Row 自己编写schema(StructType) 调用SparkSession的createDatafrmame(RDD[Row],schema)

    DataFrame转RDD原因及方式

    1. 解决一些使用sql难以处理的统计分析
    2. 将数据写入Mysql

    a.DataFrame的write.jdbc,仅支持四种模式:append、overwrite、ignore、default

    b.使用rdd的话,除了上述以外还支持insert 和 update操作,还支持数据库连接池 (自定 义,第三方:c3p0 hibernate mybatis)方式,批量高效将大量数据写入 Mysql

    方式: DataFrame转换为RDD相对来说比较简单,只需要调用DataFrame的RDD算子即可。

    原文中还有DataSet的相关讲解

    原文地址:https://zhuanlan.zhihu.com/p/61631248

  • 相关阅读:
    PHP 产生唯一码的方法分析
    Nginx 缓存cache的5种方案
    Nginx 常见应用技术指南
    BigPipe 技术细节分析
    Nginx 配置负载均衡
    linux下调整java版本
    跨域cookie在IE与firefox下的不同
    css2.1中 firefox 与IE 对margintop的不同解释
    ADOQuery代替ClientDataSet做3Tier系统
    查询数据库中的表建个进度条
  • 原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/12283891.html
Copyright © 2020-2023  润新知