首页 > 数据库 >Spark(十)SparkSQL DataSet

Spark(十)SparkSQL DataSet

时间:2024-09-24 16:47:18浏览次数:1  
标签:scala DataFrame DataSet RDD SparkSQL Spark Dataset spark

DataSet

  • DataSet是具有强类型的数据集合,需要提供对应的类型信息

1. 创建DataSet

使用样例类序列创建DataSet

scala> case class person(id:Int,name:String,age:Int)
defined class person

scala> val caseClassDS = Seq(person(1,"zhangsan",23)).toDS()
caseClassDS: org.apache.spark.sql.Dataset[person] = [id: int, name: string ... 1 more field]

scala> caseClassDS.show()
+---+--------+---+
| id|    name|age|
+---+--------+---+
|  1|zhangsan| 23|
+---+--------+---+

**使用基本类型序列创建DataSet

scala> val DS = Seq(1,2,3).toDS
DS: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> DS.show()
+-----+
|value|
+-----+
|    1|
|    2|
|    3|
+-----+

2. RDD转化为DataSet

  • SparkSQL能够自动将包含有case类的RDD转换成DataSet
  • case类定义了table的结构,case类属性通过反射变成了表的列名
  • Case类可以包含诸如Seq或者Array等复杂的结构

3. DataSet转换为RDD

scala> val RDD = DS.rdd
RDD: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[44] at rdd at <console>:25

scala> RDD.collect
res24: Array[Int] = Array(1, 2, 3)

4. DataFrame和DataSet转换

scala> val personDS = personDF.as[person]
personDS: org.apache.spark.sql.Dataset[person] = [id: int, name: string ... 1 more field]

scala> val DF = DS.toDF
DF: org.apache.spark.sql.DataFrame = [value: int]

scala> DF.show()
+-----+
|value|
+-----+
|    1|
|    2|
|    3|
+-----+

RDD、DataFrame、DataSet三者的关系

  • 如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果

共性

  • RDD、DataFrame、DataSet全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利
  • 三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算
  • 三者有许多共同的函数,如filter,排序等
  • 在对DataFrame和Dataset进行操作许多操作都需要这个包:import spark.implicits._
  • 三者都会根据Spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出
  • 三者都有partition的概念
  • DataFrame和DataSet均可使用模式匹配获取各个字段的值和类型

区别

RDD

  • RDD一般和spark mllib同时使用
  • RDD不支持sparksql操作

DataFrame

  • 与RDD和Dataset不同,DataFrame每一行的类型固定为Row,每一列的值没法直接访问,只有通过解析才能获取各个字段的值
  • DataFrame与DataSet一般不与spark mllib同时使用
  • DataFrame与DataSet均支持SparkSQL的操作,比如select,groupby之类,还能注册临时表/视窗,进行sql语句操作
  • DataFrame与DataSet支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然

DataSet

  • Dataset和DataFrame拥有完全相同的成员函数,区别只是每一行的数据类型不同,DataFrame其实就是DataSet的一个特例
  • DataFrame也可以叫 Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用getAS方法或模式匹配拿出特定字段,而Dataset中,每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获得每一行的信息

标签:scala,DataFrame,DataSet,RDD,SparkSQL,Spark,Dataset,spark
From: https://www.cnblogs.com/shihongpin/p/18429416

相关文章

  • Spark(九)SparkSQL DataFrame
    DataFrameSparkSQL的DataFrameAPI允许我们使用DataFrame而不用必须去注册临时表或者生成SQL表达式,DataFrameAPI既有transformation操作也有action操作1.创建DataFrame从Spark数据源进行创建启动SparkShell[user@hadoop102spark-yarn]$bin/spark-shell查看Spark......
  • 大数据毕业设计选题推荐-安顺旅游景点数据分析系统-Hive-Hadoop-Spark
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • Spark学习(一):概述
    Spark学习(一):概述上周六面试腾讯时被问到是否了解Spark,彼时对Spark毫无接触故答不了解,面试结束后了解到Spark与MapReduce渊源颇深,去年夏天学习MIT6.824分布式系统设计时曾深入学习过MapReduce(分布式学习:MapReduce-pinoky-博客园(cnblogs.com))故对Spark产生兴趣,由此开始学习......
  • Spark(六)运行模式(二)
    Yarn模式1、解压缩文件[user@hadoop102software]$tar-zxvfspark-3.0.0-bin-hadoop3.2.tgz-C/opt/module[user@hadoop102software]$cd/opt/module[user@hadoop102module]$mvspark-3.0.0-bin-hadoop3.2spark-yarn2、修改配置文件(1)修改hadoop配置文件/opt/module......
  • Spark(五)运行环境(一)
    Local模式不需要其他任何节点资源就可以在本地执行Spark代码的环境,一般用于教学,调试,演示等在IDEA中运行代码的环境称之为开发环境1、解压缩文件将spark-3.0.0-bin-hadoop3.2.tgz文件上传到Linux并解压缩,放置在指定位置,路径中不要包含中文或空格压缩文件放在'/opt/software......
  • [CVPR2024]DeiT-LT Distillation Strikes Back for Vision Transformer Training on L
    在长尾数据集上,本文引入强增强(文中也称为OOD)实现对DeiT的知识蒸馏的改进,实现尾部类分类性能的提升。动机ViT相较于CNN缺少归纳偏置,如局部性(一个像素与周围的区域关系更紧密)、平移不变性(图像的主体在图像的任意位置都应该一样重要)。因此需要大型数据集进行预训练。长尾数据学习......
  • 基于Spark的温布尔登特色赛赛事数据分析预测及算法实现_718p9405
    目录技术栈和环境说明python语言解决的思路具体实现截图框架介绍技术路线操作可行性性能/安全/负载方面python-flask核心代码部分展示python-django核心代码部分展示详细视频演示源码获取技术栈和环境说明结合用户的使用需求,本系统采用运用较为广泛的Python语言,DJAN......
  • LLM DATASET
    大模型的能力来源https://arxiv.org/pdf/2402.18041  大模型合规来源https://arxiv.org/html/2402.12193v2    大模型的罪恶检测来源https://www.kaggle.com/datasets/odins0n/ucf-crime-dataset/data  codemathhttps://github.com/mlabonne/llm-data......
  • Spark(三)Spark Core(二)
    RDD详解RDD持久化/缓存某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存valrdd1=sc.textFile("hdfs://node01:8020/words.txt")valrdd2=rdd1.flatMap(x=>x.split("")).map((_,1)).reduceByKey(_+_)rdd2.ca......
  • Spark(二)Spark Core(一)
    RDD详解前提:MapReduce框架采用非循环式的数据流模型,把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销,且这些框架只能支持一些特定的计算模式(map/reduce),并没有提供一种通用的数据抽象,因此出现了RDD这个概念概念RDD(ResilientDistributedDataset)叫做弹性......