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

为什么spark 2.2中仍然存在DataFrame,甚至DataSet在scala中也提供了更高的性能?[副本]

叶恩
2023-03-14

DataSet提供了比数据帧最好的性能。DataSet提供编码器和类型安全,但数据帧仍在使用中,是否有任何特定场景仅在该场景中使用数据帧,或者是否有任何功能在数据帧上工作而在数据集中不工作。

共有1个答案

胥博文
2023-03-14

Dataframe实际上是一个Dataset[Row]。它还具有许多与之关联的工具和功能,可以使用Row而不是通用Dataset[某个类]

这使DataFrame具有能够使用这些工具和函数而无需自己编写它们的直接优势。

数据帧实际上比数据集具有更好的性能。这样做的原因是Spark可以理解与数据帧相关的内置函数的内部结构,这使得Catalyst优化(重新排列和更改执行树)以及执行整体式codegen可以避免大量的虚拟化。

此外,在编写数据集函数时,需要构造相关的对象类型(例如case类)(包括复制)。这可能是一种开销,具体取决于使用情况。

数据帧的另一个优点是它的模式是在运行时而不是在编译时设置的。这意味着,例如,如果从拼花文件中读取,则模式将由文件的内容设置。这使得能够处理动态案例(例如,执行ETL)

可能有更多的原因和优势,但我认为这些是重要的原因和优势。

 类似资料:
  • 设置: 具有一个片段的活动,该片段通过单击按钮进行实例化。在fragment的构造函数中,使用了Bundle。在Bundle和ArrayList中 问题:分离片段时,字符串(姓氏)会按预期销毁,但数组列表会持续存在。因此,在调用片段的新实例时,会出现前一个ArrayList条目。回调不是问题所在。该行为也会在没有回调的情况下出现。 我已经检查了变量(和)和在点片段构造函数(),片段在方法()和片段

  • 我的文件夹结构如下: 公共html目录中的laravel项目如下所示: 问题是,当我像www.example.com一样输入url时,它会重定向到www.example.com/public.我找到了一个重写规则,允许我放入www.example.com,它只会显示不带"/Public"部分: 它对索引页面有效,但当我尝试转到任何路由时,“/public”会显示在URL中。 为什么此重写规则适用于

  • 我遇到过一件奇怪的事情:我将SOAP请求发送给SOAP服务提供者,SOAP请求包络没有SOAPAction头,正文中也没有操作名。但反应还是可以的。这是我的WSDL 请求信封 答复:

  • 问题内容: 我注意到这个构造函数非常痛苦(即使在Stack Overflow上也是如此)。即使文档明确指出,人们仍会使用它: 此构造函数的结果可能无法预测 http://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double) 我什至看到JSR-13得到批准,并提出了以下建议: 可能不推荐使用的现有规范:

  • 我正在检查类,并发现LinkedList类提供了几种方法 所有这3个方法都在列表的头部添加了一个元素。那么为什么不同的实现需要相同的功能呢? 是因为推是为了斯塔克和 offerFirst–退出队列 addFirst-LinkedList 还是一些其他的基本面? 请在这里分享一些见解。谢谢

  • 我开始阅读《Spark权威指南大数据处理变得简单》一书,学习Spark。当我阅读时,我看到一句话:“DataFrame是最常见的结构化API,它只是用行和列表示一个数据表。”我无法理解为什么RDD和数据帧被称为API?