zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    根据不同的状态查询错误
    myeclipse修改了安装目录名字打不开解决方法
    前端c标签foreach传值给后台
    Could not find result map java.lang.Integer] with root cause
    the import XXXX cannot be resolved 解决方法
    当我的url请求会变成jsp页面路径时的解决办法
    当项目启动很久一直超时怎么办?
    前端里面的变量名字多一个“;”会有这么多的区别
    java String.format()的问题
    String.format
  • 原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/12283891.html
Copyright © 2011-2022 走看看