Spark Dataset优于DataFrame的缺点

Ran*_*ure 5 apache-spark

我知道Dataset(类型安全性等)的优点,但是我找不到与Spark Datasets Limitations相关的任何文档。

有没有在那里星火任何特定情况下Dataset不建议,更好地使用DataFrame

当前,我们所有的数据工程流程都使用Spark(Scala)DataFrame。我们想Dataset在所有新流程中使用。因此了解所有限制/缺点Dataset将对我们有帮助。

编辑:这与Spark 2.0 Dataset vs DataFrame不同,后者说明了Dataframe / Dataset上的一些操作。或其他问题,其中大多数解释了rdd,数据框和数据集之间的差异以及它们的演变方式。旨在了解何时不使用数据集

Mat*_*att 12

在某些情况下,我发现 Dataframe(或 Dataset[Row])比类型化数据集更有用。

例如,当我使用没有固定模式的数据时,例如 JSON 文件包含具有不同字段的不同类型的记录。使用 Dataframe,我可以轻松地“选择”出我需要的字段,而无需知道整个架构,甚至可以使用运行时配置来指定我将访问的字段。

另一个考虑是 Spark 可以比 UDAF 和自定义 lambda 更好地优化内置的 Spark SQL 操作和聚合。因此,如果您想获得列中某个值的平方根,那是df.withColumn("rootX", sqrt("X"))Spark SQL 中的内置函数 ( ) 但在 lambda ( ds.map(X => Math.sqrt(X))) 中执行此操作效率较低,因为 Spark 无法有效优化您的 lambda 函数.

还有许多非类型化 Dataframe 函数(如统计函数)是为 Dataframes 而不是类型化数据集实现的,并且您经常会发现,即使您从数据集开始,当您完成聚合时剩下一个 Dataframe,因为这些函数通过创建新列、修改数据集的架构来工作。

一般来说,除非您有充分的理由,否则我认为您不应该从工作数据帧代码迁移到类型化数据集。从 Spark 2.4.0 开始,许多 Dataset 功能仍被标记为“实验性”,并且如上所述,并非所有 Dataframe 功能都具有 Dataset 等效项。

  • 按等分组怎么样。名称也丢失了。 (2认同)