问题标签 [catalyst-optimizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-spark - Parquet 过滤器下推不适用于 Spark 数据集 API
这是我正在运行的示例代码。
创建一个以mod列作为分区的测试镶木地板数据集。
之后,我将这些数据作为数据框读取并在分区列上应用过滤器,即 mod。
您可以在执行计划中看到,它只读取 1 个分区。
但是,如果您对数据集应用相同的过滤器。它读取所有分区,然后应用过滤器。
数据集 API 是这样工作的吗?还是我错过了什么?
scala - SQL DSL 的 spark 寄存器表达式
如何在 spark SQL scala DSL API 中访问催化剂表达式(不是常规 UDF)?
http://geospark.datasyslab.org只允许基于文本的执行
当我尝试使用 SQL scala DSL
df.withColumn("foo", ST_Point(col("x"), col("y")))
时,出现类型不匹配预期列得到ST_Point的错误。
我需要更改哪些catalyst expression
内容才能正确注册为可直接通过 scala SQL DSL API 调用的内容?
编辑
编辑2
失败:
scala - 如何使用火花催化剂?
根据这个 Spark Catalyst 是一个与实现无关的框架,用于操作关系运算符和表达式的树。我想使用 Spark Catalyst 解析 SQL DML 和 DDL 来编写和生成自定义 Scala 代码。但是,通过阅读代码,我不清楚是否有任何可以使用的围绕 Catalyst 的包装类?理想的包装器将接收一条 sql 语句并生成等效的 Scala 代码。对于我的用例看起来像这样
这是一个简单的例子,但想法是我不想编写另一个解析器,我需要从遗留系统中解析许多 SQL 功能,我必须为它们编写自定义 Scala 实现。
在一个更普遍的问题中,由于缺乏类级设计文档,人们如何学习代码库并做出贡献?
scala - 使用 CassandraSQLContext 从 Spark 查询 Cassandra
我尝试使用 CassandraSQLContext 从 Spark 查询 Cassandra,但我得到一个奇怪的缺少依赖项错误。我有一个 Spark 应用程序,如下所示:
我得到一个缺少的 Spark scala 类错误:
我还尝试spark-catalyst
在命令中显式添加 jar 路径spark-submit
,但我仍然遇到相同的问题(无论是在本地运行还是在 yarn 集群上运行)...
这是我的项目设置build.sbt
:
关于我所缺少的任何想法?
apache-spark - UDF 没有从哪些优化中受益?
Spark UDF 包含以下功能:可为空、确定性、数据类型等。因此根据这些信息,它将受益于诸如 ConstantFolding 之类的优化。它还受益于哪些其他优化,哪些优化不能受益?我之所以这么问,是因为许多演示文稿将 UDF 视为一个黑匣子,它不会从催化剂优化中受益,但很明显,它会从 ConstantFolding 中受益。
apache-spark - 防止火花催化剂优化和移动动态并行性
我需要spark.sql.shuffle.partitions
在我的 spark 作业执行期间动态设置。最初,它是在开始工作时设置的,但经过各种聚合后,我需要一遍又一遍地减少它。
然而,催化剂倾向于将这种情况向后推(进入更早的操作)——即使我不希望它发生。我目前的解决方法是使用打破催化剂谱系的检查点。但是检查点 1) 写入磁盘 2) 需要缓存之前的操作,否则会重新计算。这意味着如果数据对于内存来说太大,我需要缓存和检查点,即写入磁盘两次。
显然,这很慢并且不太理想。有没有另一种方法告诉催化剂在我真正希望它发生在谱系中的点之前不要应用降低的并行性?
apache-spark - Spark DataFrame如何在mapPartitions之后保留排序和分区信息
mapPartitions
我在一个松散地实现Uber 案例研究的库中使用 DataFrame 。输出 DataFrame 有一些新的(大)列,输入 DataFrame 在执行之前进行了分区和内部排序mapPartitions
。大多数用户会在其他列上进行投影,然后在已经分区的列上进行聚合。这会导致昂贵的冗余洗牌,因为mapPartitions
使用planWithBarrier
. 我想知道在催化剂 api 中是否有一个简单的解决方案?
代码示例:
如您所见,按(注意多对一关系)进行resultDF
分区并在内部排序。key1
但是resultDF.groupBy("key1").agg(count("value1"))
,例如,将导致交换。
欢迎任何建议。
dataframe - 将数据框转换为数据集后的选择是否已优化?
我有以下情况:
上面是否优化为仅选择age
?看到result.explain
我看到以下内容
似乎只有age
读了。但那有什么用as
呢?我在阅读物理计划时是否正确?
apache-spark - 如何在不分叉/修改 Spark 本身的情况下创建自定义 Spark-Native 函数
我正在考虑将一些 UDF/UDAF 转换为 Spark-Native 函数以利用 Catalyst 和 codegen。
查看一些示例(例如: Levenshtein 的https://github.com/apache/spark/pull/7214/files),似乎我们需要将这些函数添加到 Spark 框架本身(即通过 FunctionRegistry.scala)。
有没有办法在“用户空间”中添加自定义 Spark-Native 函数,即无需分叉/修改实际的 Spark 代码库?
谢谢!
apache-spark - Spark优化“DataFrame.explain”/催化剂
我有一个复杂的软件,它执行非常复杂的 SQL 查询(不是查询,你知道的 Spark 计划)。<-- 计划是动态的,它们会根据用户输入而变化,因此我无法“缓存”它们。
我有一个阶段,其中 spark 需要 1.5-2 分钟来制定计划。为了确保,我添加了“logXXX”,然后是 explain(true),然后是“logYYY”,解释执行需要 1 分 20 秒。
我试图打破血统,但这似乎会导致性能下降,因为实际执行时间变得更长。
我不能并行化驱动程序的工作(已经做过,但是这个任务不能与其他任何事情重叠)。
关于如何改进 Spark 中的计划生成器的任何想法/指南?(例如,尝试启用/禁用的标志等等......)
有没有办法在 Spark 中缓存计划?(所以我可以并行运行它然后执行它)
我尝试禁用所有可能的优化器规则,将最小迭代次数设置为 30 ......但似乎没有任何影响具体点:S
我尝试禁用 wholeStageCodegen 并有所帮助,但执行时间更长:)。
谢谢!,
PS:该计划确实包含多个联合(<20,但每个联合内的计划非常复杂),这是造成时间的原因,但将它们分开也会影响执行时间。