当前位置: 首页 > article >正文

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

1. 概念:

RDD:

弹性分布式数据集;

DataFrame:

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

DataFrame 是 DataSet[Row]

DataSet:

Dataset是一个强类型的特定领域的对象,Dataset也被称为DataFrame的类型化视图,这种DataFrame是Row类型的Dataset,即Dataset[Row]。

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

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

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

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. 三者之间的转换

  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


http://www.kler.cn/a/412594.html

相关文章:

  • Django在fitler过滤不等于的条件
  • 移门缓冲支架:保护您的家
  • 欢迪迈手机商城:SpringBoot框架的缓存机制
  • 基于SSM的学科竞赛管理系统
  • 前端编程训练 异步编程篇 请求接口 vue与react中的异步
  • 决策树分类算法【sklearn/决策树分裂指标/鸢尾花分类实战】
  • git 远端删除分支本地同步删除
  • UE4 iOS Package的过程与XCode工程中没有游戏Content的原因
  • C++学习日记---第12天(函数重载+蓝桥杯基础题)
  • 【C语言篇】从字符海洋到整数大陆——atoi 的探险之旅
  • 服务器记录所有用户docker操作,监控删除容器/镜像的人
  • ByConity ELT 测试体验
  • 【Agorversev1.1数据转换】Agorverse高清地图转OpenStreetMap及SUMO路网
  • 第29天:安全开发-JS应用DOM树加密编码库断点调试逆向分析元素属性操作
  • 【文献阅读】自动化构音障碍严重程度分类:声学特征与深度学习技术的研究
  • Vuex中通过action触发mutation是为什么?[AI]
  • BERT的配置
  • 消息队列实战指南
  • uni-app 自定义平台如何进行 static 目录的条件编译
  • 排序算法之插入排序篇