【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象

1. 概念:

RDD:

弹性分布式数据集;

DataFrame:

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这样的数据集可以用SQL查询。DataFrame是不可变的,即一旦创建,就不能修改其内容。

DataFrame 是 DataSet[Row]

DataSet:

简单的说,DataSet和DataFrame的区别就是,DataSet会在编译阶段就进行类型检查 ,而DataFrame在运行阶段才会类型检查。

Dataset是一个强类型 的特定领域的对象,Dataset也被称为DataFrame的类型化视图,**这种DataFrame是Row类型的Dataset,即Dataset[Row]。**Dataset结合了DataFrame的优化和RDD的类型安全。Dataset提供了编译时类型检查(而DataFrame不会,DataFrame只会在运行阶段才会检查类型),确保数据在编译阶段就符合预期的类型。

dataset是dataFrame的升级版对象,dataframe是一个传统的sql编程对象,如果要想使用dataframe进行灵活开发的比较复杂。

dataset和dataFrame是一个类别的对象,都是可以进行sql查询数据的,并且可以支持rdd上面的方法。

当我们需要对一个表对象进行二次处理的话建议大家转换为dataset而不是dataframe。

Scala 复制代码
package com.hainiu.spark

import org.apache.spark.sql.{Dataset, SparkSession}

object TestDSAndDF {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().master("local[*]").appName("test").getOrCreate()
    import session.implicits._
    val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
    ds.map(t=>{
      val strs = t.split(" ")
      (strs(0), strs(1), strs(2), strs(3))
    })

//    val df = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
//      .load("file:///headless/workspace/spark/data/a.txt")
//    
//    val ds: Dataset[(String, String, String, String)] = df.map(row => {
//      val line = row.getAs[String]("value")
//      val strs = line.split(" ")
//      (strs(0), strs(1), strs(2), strs(3))
//    })
  }
}

2. 三者之间的转换

Scala 复制代码
  val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
    ds.map(t=>{
      val strs = t.split(" ")
      (strs(0), strs(1), strs(2), strs(3))
    })

    val df1 = ds.toDF("id","name","age","gender")

    val df: Dataset[Row] = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
      .load("file:///headless/workspace/spark/data/a.txt")

    val rdd = session.sparkContext.textFile("file:///headless/workspace/spark/data/a.txt")
    rdd.toDS()
    rdd.toDF()

    df.rdd
    ds.rdd
相关推荐
数据小子2145 小时前
【自记】MaxCompute中的冒烟测试
大数据·maxcompute
未来之窗软件服务6 小时前
万象EXCEL开发(九)excel 高级混合查询 ——东方仙盟金丹期
大数据·excel·仙盟创梦ide·东方仙盟·万象excel
养生技术人7 小时前
Oracle OCP认证考试题目详解082系列第54题
数据库·sql·oracle·运维开发·database·开闭原则·ocp
文火冰糖的硅基工坊8 小时前
[人工智能-综述-21]:学习人工智能的路径
大数据·人工智能·学习·系统架构·制造
TDengine (老段)11 小时前
TDengine 时序函数 MAVG 用户手册
大数据·数据库·物联网·性能优化·时序数据库·iot·tdengine
58沈剑12 小时前
1W+属性,每秒10W+吞吐,100Y+数据,架构如何设计?(第101讲,万字收藏)
大数据·架构
IT毕设梦工厂14 小时前
大数据毕业设计选题推荐-基于大数据的人口普查收入数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·数据分析·spark·毕业设计·源码·bigdata
计算机源码社14 小时前
基于Hadoop的车辆二氧化碳排放量分析与可视化系统|基于Spark的车辆排放量实时监控与预测系统|基于数据挖掘的汽车排放源识别与减排策略系统
大数据·hadoop·机器学习·数据挖掘·spark·毕业设计·课程设计
养生技术人14 小时前
Oracle OCP认证考试题目详解082系列第50题
运维·数据库·sql·oracle·database·开闭原则
代码匠心17 小时前
从零开始学Flink:数据输出的终极指南
java·大数据·后端·flink