DataSet的介绍以及常用操作

1227-李同学

发表文章数:84

热门标签

首页 » 大数据 » 正文

概念

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

DataFrame、DataSet、RDD的区别

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

创建DataSet

创建dataSet一共可以有四种方式
第一种方式:spark.createDataset(“已经存在的scala集合”)
第二种方式:spark.createDataset(“已经存在的RDD”)
第三种方式:已经存在的scala集合调用toDS
第四种方式:通过DataFrame转换变成DataSet

第一种方式创建DataSet

通过spark.createDataset通过集合进行创建dataSet

scala> val ds1 = spark.createDataset(1 to 10)
ds1: org.apache.spark.sql.Dataset[Int] = [value: int]
scala> ds1.show

从已经存在的rdd当中构建dataSet

scala> val ds2 = spark.createDataset(sc.textFile("file:///export/servers/person.txt"))
ds2: org.apache.spark.sql.Dataset[String] = [value: string]
scala> ds2.show

第二种方式创建DataSet

通过样例类配合创建DataSet

scala> case class Person(name:String,age:Int)
scala> val personDataList = List(Person("zhangsan",18),Person("lisi",28))
scala> val personDS = personDataList.toDS
personDS: org.apache.spark.sql.Dataset[Person] = [name: string, age: int]

第三种方式创建DataSet

通过DataFrame转化生成
使用as[类型]转换为DataSet

scala> case class Person(name:String,age:Long)
defined class Person
scala> val jsonDF = spark.read.json("file:///export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/src/main/resources/people.json")
jsonDF: org.apache.spark.sql.DataFrame = [age: bigint, name: string]

scala> val jsonDS = jsonDF.as[Person]
jsonDS: org.apache.spark.sql.Dataset[Person] = [age: bigint, name: string]

DataFrame与DataSet互相转换

DataFrame和DataSet可以相互转化。

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

注意:RDD也可以与DataSet互相转换
RDD转换成为DataSet直接通过rdd调用toDS方法即可

scala> val lineRDD = sc.textFile("file:///export/servers/person.txt")
scala> lineRDD.toDS.show

DataSet转换成为RDD直接通过dataSet调用rdd方法即可

scala> val lineRDD = sc.textFile("file:///export/servers/person.txt")
scala> val lineDataSet = lineRDD.toDS
scala> val lineRDD = lineDataSet.rdd
标签:

未经允许不得转载:作者:1227-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《DataSet的介绍以及常用操作》 发布于2020-11-12

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录