Spark DataSet 和 DataFrame 的区别

简介: Spark DataSet 和 DataFrame 的区别

Spark 中的 DataSet 和 DataFrame 是概念上相似的数据结构,都是优化的数据集和存储在分布式内存上的集合。尽管它们看起来相同,但是在内部实现和使用方式上,它们还是有一些主要的区别的。

  1. 类型检查:

DataFrame 基于 Catalyst Optimizer,可以利用其中的模式信息做到强类型检查和编译器优化。而 DataSet 是强类型的,这会在编译时进行类型检查。当类型不匹配时,编译器会在编译时就直接报错。

  1. 强类型和弱类型:

DataFrame 是弱类型的,它在特定情况下隐式转换数据类型,我们也可以使用 Cast 函数来转换。DataSet 是强类型的,编译时就已经确定了类型。

  1. 调用函数:

DataFrame 有两种主要的 API,一种是 DataFrame API,另一种是 SQL。所有的 DataFrame API 都支持基于列的转换,而 SQL 仅支持 SQL 操作。DataSet 支持方法调用,可以使用各种函数进行转换。

  1. 序列化:

DataSet 仅序列化成 Java 对象或者二进制数据,而 DataFrame 利用 Tungsten 和 Catalyst 进行序列化。Tungsten 是 Spark 1.5 新特性,基于 Unsafe 操作追求极致的执行效率;Catalyst 则是 Spark 2.0 新增的高效 SQL 执行器。

结论:

  • 如果需要从 Python 或者 R 中访问数据,推荐使用 DataFrame。
  • 如果需要数据类型检查或直观的面向对象的 API,并且有计划输出到编译时确定的代码格式(如常规 Scala 软件开发项目或者期望代码更容易维护,除非数据格式更改仍然需要更新的花费较少的测试代码(如 Spark 规范项目或持续交付流程)),则应使用 DataSet。
  • 如果数据本身的结构并没有太多复杂性,可以更轻松地与 DataFrame 进行交互。一旦遇到过度复杂的结构或无法进行首次检查的结构(例如数据 schema 引用动态配置或直接从外部源读取的情况),则应考虑转换为 DataSet 以进行强检查和更清晰的编译时报告。
相关文章
|
1月前
|
分布式计算 数据处理 Apache
Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
【10月更文挑战第10天】Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
178 1
|
18天前
|
分布式计算 资源调度 Hadoop
Spark Standalone与YARN的区别?
本文详细解析了 Apache Spark 的两种常见部署模式:Standalone 和 YARN。Standalone 模式自带轻量级集群管理服务,适合小规模集群;YARN 模式与 Hadoop 生态系统集成,适合大规模生产环境。文章通过示例代码展示了如何在两种模式下运行 Spark 应用程序,并总结了两者的优缺点,帮助读者根据需求选择合适的部署模式。
40 3
|
12天前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
1月前
|
分布式计算 资源调度 Hadoop
Spark Standalone与YARN的区别?
【10月更文挑战第5天】随着大数据处理需求的增长,Apache Spark 成为了广泛采用的大数据处理框架。本文详细解析了 Spark Standalone 与 YARN 两种常见部署模式的区别,并通过示例代码展示了如何在不同模式下运行 Spark 应用程序。Standalone 模式自带轻量级集群管理,适合小规模集群或独立部署;YARN 则作为外部资源管理器,能够与 Hadoop 生态系统中的其他应用共享资源,更适合大规模生产环境。文章对比了两者的资源管理、部署灵活性、扩展性和集成能力,帮助读者根据需求选择合适的部署模式。
26 1
|
1月前
|
SQL 分布式计算 大数据
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
大数据-94 Spark 集群 SQL DataFrame & DataSet & RDD 创建与相互转换 SparkSQL
54 0
|
3月前
|
缓存 分布式计算 数据处理
|
3月前
|
SQL 存储 分布式计算
|
3月前
|
分布式计算 Serverless 数据处理
|
5月前
|
资源调度 分布式计算 监控
Spark Standalone与YARN的区别?
【6月更文挑战第17天】Spark Standalone与YARN的区别?
328 57
|
5月前
|
分布式计算 Hadoop 大数据
Spark与Hadoop的区别?
【6月更文挑战第15天】Spark与Hadoop的区别?
59 8