Dataset

Dataset是结构化API的基本类型,我们已经使用了DataFrame,它是Row类型的Dataset,在Spark各种语言中都得到了支持。Dataset具有严格的Java虚拟机(JVM)语言特性,仅与Scala和Java一起使用。你可以定义Dataset中每一行所包含的对象。在Scala中就是一个case类对象,它实质上定义了一种模式schema,而在Java中就是Java Bean。经验丰富的用户经常将Dataset称为Spark中的"类型化的API"(Dataset在编译时检查类型,DataFrame在运行时检查类型)

使用DataFrame API时,不需要创建字符串或整数,Spark就可以通过操作Row对象来处理数据。如果使用Scala或Java,则所有"DataFrame"实际上都是Row类型的Dataset,为了有效地支持特定领域的对象,需要一个称为"编码器(Encoder)"的特殊概念,编码器将特定领域类型T映射为Spark的内部类型

例如,给定一个类Person具有两个字段,名称(string)和年龄(int),编码器保证Spark在运行时生成代码以序列化Person对象为二进制结构。使用DataFrame或"标准的"结构化API时,此二进制结构就是Row类型。当我们要创建自己的特定领域对象时,可以在scala中指定一个case类,或者在Java中通过JavaBean,这样我们可以通过Spark以分布式方式操作此对象(不是Row类型的对象)

当使用Dataset API时,将Spark Row格式的每一行转换为指定的特定领域类型的对象(case类或Java类),此转换会减慢操作速度,但可以提供更大的灵活性。你将看到性能的下降,但这与Python中的用户定义函数(UDF)之类的概念有着巨大的不同,因为性能成本并不像切换编程语言那样极端,用户最好能了解这点。

何时使用Dataset

你可能会想,如果在使用Dataset时损失性能,那为什么还要使用它们呢?有如下几个主要原因:

  1. 当你要执行的操作无法使用DataFrame操作表示时
  2. 如果需要类型安全,并且愿意牺牲一定性能来实现它

Scala:Case类

在Scala中创建Dataset,要定义Scala的case类

现在,我们定义了case class,它表示数据中的单个记录,更简单地说,它是我们现在有一个包含Flight类型的Dataset,只有模式没有方法,当读数据时,我们会得到一个DataFrame,使用as方法将其强制转换为指定的行类型

动作操作

Dataset的作用很大,但重要的是要理解,不管是使用Dataset或者DataFrame,像collect,take和count这样的操作的应用:

当我们实际去访问这些case class时,不需要执行任何类型强制转化,只需指定case class的属性名并返回,返回包括预期值和预期类型

映射

过滤是一个简单的转换操作,但有时需要将一个值映射到另一个值,

最简单的示例是从Dataset的每行中提取一个值,这实际上是在Dataset上执行像select这样的操作:

bash 复制代码
val destinations = flights.map(f => f.DEST_COUNTRY_NAME)

注意,我们返回String类型的Dataset,这是因为Spark已经知道这个结果应该返回的JVM类型,如果由于某种原因返回结果无效的话,我们也可以从编译时检查中受益。我们可以在驱动器上collect结果并返回字符串数组:

val localDestinations = destinations.take(5)

相关推荐
绿算技术8 小时前
Solidigm联合绿算技术共同发布《面向 SOHO AI 推理的存储扩展方案》技术白皮书
人工智能·科技·算法·架构·spark
阿里云大数据AI技术9 小时前
EMR Serverless Spark:CPU + GPU 异构计算使用指南
人工智能·spark·gpu
BYSJMG1 天前
计算机毕设选题做什么好?基于大数据的用户美食数据分析与可视化,PySpark预处理+ECharts大屏,含Isolation Forest异常检测算法
大数据·python·信息可视化·数据分析·spark·课程设计·美食
2601_962295992 天前
Spark 和 Kafka 实现 Python 大规模情感分析
python·spark·kafka·情感分析·大规模处理
fastjson_2 天前
Spark 安装和使用
大数据·分布式·spark
计算机源码社2 天前
分享一个基于大数据的跨平台内容生态画像与互动等级分析系统,基于Hadoop+Spark的社交媒体互动数据可视化大屏分析
大数据·hadoop·python·机器学习·数据挖掘·spark·毕业设计
BYSJMG2 天前
计算机毕设选题做什么好?基于大数据的用户健身行为数据分析与可视化系统,Hadoop+Spark处理
大数据·人工智能·hadoop·数据分析·spark·课程设计
2601_962298092 天前
零基础学大数据分析全栈
hadoop·python·spark·实战·大数据分析
用户3610588626123 天前
SparkStreaming 之 Kafka 与 SparkStreaming 参数配置详解
大数据·spark
BYSJMG3 天前
大数据毕业设计选题推荐:基于大数据的全球气温历史演变分析与可视化,用Hadoop+Spark处理
大数据·hadoop·分布式·信息可视化·spark·kmeans·课程设计