当前位置: 首页 > 知识库问答 >
问题:

在什么情况下,数据集比数据帧更受欢迎,反之亦然?

穆浩皛
2023-03-14

我一直在搜索任何链接、文档或文章,以帮助我了解我们何时选择数据集而不是数据框,反之亦然?

我在互联网上找到的所有标题都是何时使用数据集,但当打开时,它们只指定了数据帧和数据集之间的区别。这里有很多链接,只是列出了场景名称的不同。

stackoverflow上只有一个问题有正确的标题,但即使在这个答案中,databricks文档链接也不起作用。

我正在寻找一些信息,这些信息可以帮助我从根本上了解我们何时使用数据集或在什么情况下数据集优于数据帧,反之亦然。如果不是答案,即使是可以帮助我理解的链接或文档也值得赞赏。

共有2个答案

汪才
2023-03-14

在 Apache Spark 中,当数据是强类型时,即当架构是提前知道并且数据不一定是同类的时,数据集优先于数据帧。这是因为数据集可以强制实施类型安全,这意味着类型错误将在编译时而不是运行时捕获。此外,数据集可以利用 Catalyst 优化器,从而提高执行效率。最后,数据集可以轻松转换为数据帧,因此无需预先在两者之间进行选择。

田远
2023-03-14

您正在查找的页面已移至此处。根据会话,总之,Dataset API仅适用于Scala(和Java),它结合了RDD和Dataframe的优点,即:

  1. 函数编程(RDD)
  2. 类型安全(RDD)
  3. 关系(数据帧)
  4. Catalyst查询优化(数据帧)
  5. Tunsten直接/打包RAM(数据帧)
  6. JIT代码生成(数据帧)
  7. 排序/乱序而不反序列化(数据帧)

此外,数据集消耗的内存更少,并且可以在编译时捕获分析错误,同时在运行时缓存数据帧。这也是一篇好文章。

因此,答案是,当您使用 Scala 或 Java 编码并希望使用函数式编程并通过所有数据帧功能节省更多内存时,您最好使用数据集。

 类似资料:
  • 我有两个数据帧DF1和DF2。 DF1: DF2: 我需要来自DF2的行数,其中EmploymentType='Employee',EmpStatus='Active',EmpStartDate 输出: 如何在不合并两个数据帧的情况下实现这一点? 我不能合并数据帧,因为没有公共键,而且因为我需要基于条件的行数,我不能在任何临时列上加入数据帧,因为我需要避免交叉连接。

  • Java线程本身实现了一个Java!根据互联网上大多数专家的说法,实现Runnable比扩展线程更受欢迎!即使我们不能在没有thread类的情况下使用thread意义上的Usage Runnable 那么为什么我们更喜欢实现而不是扩展,因为在这两种情况下,实际的线程都是通过调用实现的方法(即或)来表示的,尽管在的情况下,我们并不是仅仅通过覆盖来真正“扩展”Thread的功能方法 如果我听起来很困惑

  • 大家能不能结合自己的项目大小,说明一下。 哨兵+主从模式,会在多大数据量情况下出现性能瓶颈?

  • 我今天遇到了一些奇怪的事情。下面的代码编译意外,运行正常。 但这一条给出了编译错误 有人能解释一下这种行为吗?

  • 本文向大家介绍在某些情况下如何更改R数据帧中的列?,包括了在某些情况下如何更改R数据帧中的列?的使用技巧和注意事项,需要的朋友参考一下 有时,特定列的列值与另一列有某种关系,我们可能需要根据某些条件来更改该特定列的值。我们需要进行此更改,以检查列值的更改如何对所考虑的两个列之间的关系产生影响。在R中,我们可以使用单个方括号来更改列值。 示例 请看以下数据帧- 假设我们想从第2列(x2)值中减去2,

  • 首选的方法是什么?使用const和import有什么区别?假设您可能在许多文件/组件中导入相同的库。 常量 进口