Apache spark Spark数据集在数据帧上的缺点
我知道Apache spark Spark数据集在数据帧上的缺点,apache-spark,Apache Spark,我知道数据集(类型安全等)的优点,但我找不到任何与Spark数据集限制相关的文档 是否存在SparkDataset不推荐使用的任何特定场景,最好使用DataFrame 目前,我们所有的数据工程流程都使用Spark(Scala)DataFrame。 我们希望将数据集用于所有新流程。因此,了解Dataset的所有限制/缺点将对我们有所帮助 编辑:这与不同,这解释了对数据帧/数据集的一些操作。或者其他问题,其中大多数解释了rdd、dataframe和dataset之间的差异以及它们是如何演变的。这是为
数据集
(类型安全等)的优点,但我找不到任何与Spark数据集限制相关的文档
是否存在SparkDataset
不推荐使用的任何特定场景,最好使用DataFrame
目前,我们所有的数据工程流程都使用Spark(Scala)DataFrame
。
我们希望将数据集
用于所有新流程。因此,了解Dataset
的所有限制/缺点将对我们有所帮助
编辑:这与不同,这解释了对数据帧/数据集的一些操作。或者其他问题,其中大多数解释了rdd、dataframe和dataset之间的差异以及它们是如何演变的。这是为了知道,什么时候不使用数据集我发现在一些情况下,数据帧(或数据集[行])比类型化数据集更有用 例如,当我在使用没有固定模式的数据时,比如JSON文件,其中包含具有不同字段的不同类型的记录。使用数据帧,我可以轻松地“选择”出所需的字段,而无需了解整个模式,甚至可以使用运行时配置来指定要访问的字段 另一个需要考虑的问题是,Spark可以比UDAFs和自定义lambda更好地优化内置的Spark SQL操作和聚合。因此,如果您想获取列中某个值的平方根,这是Spark SQL中的内置函数(
df.withColumn(“rootX”,sqrt(“X”)
),但在lambda(ds.map(X=>Math.sqrt(X))
)中进行此操作效率较低,因为Spark无法有效地优化lambda函数
还有许多非类型化的Dataframe函数(如统计函数)是为Dataframes而不是类型化的数据集实现的,并且您经常会发现,即使您从一个数据集开始,在完成聚合时,您仍然会得到一个Dataframe,因为这些函数通过创建新列来工作,修改数据集的架构
一般来说,我认为您不应该从工作数据帧代码迁移到类型化数据集,除非您有充分的理由这样做。从Spark 2.4.0开始,许多数据集功能仍被标记为“实验性”功能,如上所述,并非所有数据帧功能都具有数据集等效功能。Spark数据集的限制:
reverse
函数传递一个日期对象,它将返回一个垃圾响应,而不是出错导入java.sql.Date
病例类出生(hospitalName:String,生日:Date)
val birthds=Seq(
出生(“韦斯特切斯特”,日期。价值(“2014-01-15”))
).toDS()
birthsDS.withColumn(“无意义”,背面为($“生日”)).show()
这是一个奇怪的问题,因为这是前进的方向。为什么?应该有一些情况下,spark dataframes最适合,我们知道DataFrame是Dataset[Row],在任何情况下,我都没有做-1。我不喜欢吵架。最终,ds将占上风。如果我没记错的话,它可以使用mapPartitions。它还混合了rdd的内容。可能与按等分组的内容重复。名称也会丢失。
+------------+----------+-----------+
|hospitalName| birthDate|meaningless|
+------------+----------+-----------+
| westchester|2014-01-15| 51-10-4102|
+------------+----------+-----------+