DataSet是什么,怎么用

本文介绍了Spark中的DataSet,一种结合了RDD灵活性和SparkSQL优化执行能力的数据结构。详细解释了DataSet与DataFrame及RDD之间的区别,并展示了如何创建及转换DataSet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是DataSet?
DataSet是分布式的数据集合。DataSet是在Spark1.6中添加的新的接口。它集中了RDD的优点(强类型和可以用强大lambda函数)以及Spark SQL优化的执行引擎。DataSet可以通过JVM的对象进行构建,可以用函数式的转换(map/flatmap/filter)进行多种操作。

DataFrame、DataSet、RDD的区别

假设RDD中的两行数据长这样:
在这里插入图片描述
那么DataFrame中的数据长这样:

那么Dataset中的数据长这样: 在这里插入图片描述
或者长这样(每行数据是个Object):
在这里插入图片描述

DataSet包含了DataFrame的功能,Spark2.0中两者统一,DataFrame表示为DataSet[Row],即DataSet的子集。
(1)DataSet可以在编译时检查类型
(2)并且是面向对象的编程接口
相比DataFrame,Dataset提供了编译时类型检查,对于分布式程序来讲,提交一次作业太费劲了(要编译、打包、上传、运行),到提交到集群运行时才发现错误,这会浪费大量的时间,这也是引入Dataset的一个重要原因。

DataFrame与DataSet的互转
DataFrame和DataSet可以相互转化。
(1)DataFrame转为 DataSet
df.as[ElementType]这样可以把DataFrame转化为DataSet。
(2)DataSet转为DataFrame
ds.toDF()这样可以把DataSet转化为DataFrame。

创建DataSet

(1)通过spark.createDataset创建

//todo:1、创建SparkSession,指定appName和master
val spark: SparkSession = SparkSession.builder()
  .appName("SparkSqlSchema")
  .master("local[2]")
  .getOrCreate()
//需要导入隐式装换
import spark.implicits._
//创建dataframe的方式1
val ds: Dataset[Int] = spark.createDataset(0 to 10)
ds.show()
spark.stop()

(2)通toDS方法生成DataSet

//todo:1、创建SparkSession,指定appName和master
val spark: SparkSession = SparkSession.builder()
  .appName("SparkSqlSchema")
  .master("local[2]")
  .getOrCreate()
//需要导入隐式装换
import spark.implicits._
val df = spark.createDataFrame(List(Person01("Jason", 34), Person01("Tom", 20)))
val ds: Dataset[Person01] = df.as[Person01]
ds.show()
spark.stop()

(3)通过List封装数据直接转换成dataSet

//todo:1、创建SparkSession,指定appName和master
val spark: SparkSession = SparkSession.builder()
  .appName("SparkSqlSchema")
  .master("local[2]")
  .getOrCreate()
import spark.implicits._
//需要导入隐式装换
val ds = List(Person("Jason", 34), Person("Tom", 20)).toDS()
ds.show();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值