Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Spark:显式缓存可能会干扰Catalyst optimizer';s优化某些查询的能力?_Performance_Apache Spark_Dataset_Catalyst - Fatal编程技术网

Performance Spark:显式缓存可能会干扰Catalyst optimizer';s优化某些查询的能力?

Performance Spark:显式缓存可能会干扰Catalyst optimizer';s优化某些查询的能力?,performance,apache-spark,dataset,catalyst,Performance,Apache Spark,Dataset,Catalyst,我正在学习参加数据砖火花认证考试,他们的实践考试(请参见>)要求我们接受以下陈述: “显式缓存会干扰应用程序性能 利用Catalyst optimizer优化某些查询的能力” 我把这个问题搞错了,尽管我已经读了很多关于catalyst的书,并且对细节有很好的理解。所以我想巩固我对这个主题的知识,并找到解释这个断言背后的原因和方式的来源 有人能提供这方面的指导吗?具体来说,为什么会这样?我们如何确保在缓存数据集时不会妨碍优化器并使事情变得更糟/谢谢 缓存如何以及为什么会降低性能? 让我们用一个简单

我正在学习参加数据砖火花认证考试,他们的实践考试(请参见>)要求我们接受以下陈述:

“显式缓存会干扰应用程序性能 利用Catalyst optimizer优化某些查询的能力”

我把这个问题搞错了,尽管我已经读了很多关于catalyst的书,并且对细节有很好的理解。所以我想巩固我对这个主题的知识,并找到解释这个断言背后的原因和方式的来源

有人能提供这方面的指导吗?具体来说,为什么会这样?我们如何确保在缓存数据集时不会妨碍优化器并使事情变得更糟/谢谢

缓存如何以及为什么会降低性能? 让我们用一个简单的例子来说明:

// Some data
val df = spark.range(100)

df.join(df, Seq("id")).filter('id <20).explain(true)
筛选器在第二次联接之前完成,但在第一次联接之后完成,因为它是缓存的

如何避免?
知道你在做什么!您可以简单地比较catalyst计划,看看Spark缺少哪些优化。

感谢您提供了出色的答案和示例。我注意到,在数据帧定义的缓存版本中,您进行了两次连接,而在原始版本中,您只有一次连接:df.join(df,Seq(“id”)).filter('id关于答案的另一个观察结果。您说过缓存是强制执行查询的一种方式。但我的理解是,这是不正确的。您必须在数据集/帧上执行一个操作才能强制执行。这在jackek laskowski先生的书中提到->——不过是小点…再次感谢您的回答。谢谢非常感谢您的反馈,关于连接,我特意做了两次连接,以表明缓存的一个没有得到优化,第二个得到优化。关于缓存,非常感谢,我真的不知道这不是执行查询计划的操作(Jacek也在同一个链接中写道,这是一个动作,但他告诉其他任何地方它不是,所以可能不是!)非常感谢您的反馈,我想念.df.join(df,Seq(“id”)).filter('id@thebluephantom,不确定你的问题是什么?通过你的查询,我希望下推谓词能够优化你的过滤器,如果是问题:)
== Optimized Logical Plan ==
Project [id#0L]
+- Join Inner, (id#0L = id#69L)
   :- Filter (id#0L < 20)
   :  +- Range (0, 100, step=1, splits=Some(4))
   +- Filter (id#69L < 20)
      +- Range (0, 100, step=1, splits=Some(4))
df.join(df, Seq("id")).cache.filter('id <20).explain(true)

== Optimized Logical Plan ==
Filter (id#0L < 20)
+- InMemoryRelation [id#0L], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
      +- *Project [id#0L]
         +- *BroadcastHashJoin [id#0L], [id#74L], Inner, BuildRight
            :- *Range (0, 100, step=1, splits=4)
            +- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
               +- *Range (0, 100, step=1, splits=4)
df.join(df, Seq("id")).cache.join(df, Seq("id")).filter('id <20).explain(true)

== Optimized Logical Plan ==
Project [id#0L]
+- Join Inner, (id#0L = id#92L)
   :- Filter (id#0L < 20)
   :  +- InMemoryRelation [id#0L], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
   :        +- *Project [id#0L]
   :           +- *BroadcastHashJoin [id#0L], [id#74L], Inner, BuildRight
   :              :- *Range (0, 100, step=1, splits=4)
   :              +- BroadcastExchange HashedRelationBroadcastMode(List(input[0, bigint, false]))
   :                 +- *Range (0, 100, step=1, splits=4)
   +- Filter (id#92L < 20)
      +- Range (0, 100, step=1, splits=Some(4))