如何在数据源级执行功能(并依次绕过Catalyst)?

时间:2017-09-18 08:31:42

标签: apache-spark apache-spark-sql

Apache Spark™提供了一种可插拔机制,可使用DataSource API与外部数据源集成。这些API允许Spark从外部数据源读取数据,也可以从Spark中分析的数据中读取数据,以便将其写回外部数据源。 DataSource API还支持过滤器下推和列修剪,可显着提高查询性能。

除此之外,我想知道Apache spark是否也提供了能力(或界面) 对于能够本地执行函数(本机或用户定义)的数据源?

我们拥有专有数据源,它可以为max(),min(),size()等函数提供结果。

1 个答案:

答案 0 :(得分:1)

tl; dr 不,这是不可能的。

Spark SQL使用函数作为一个更易于开发人员的界面来创建Catalyst表达式,这些表达式知道在给定InternalRow时生成什么(每个可用的零行,一行或多行以及表达式是否是用户定义的功能或用户定义的聚合函数,分别)。

DataSource不会以任何方式与Column(或特别是Catalyst表达式)交互,反之亦然。它们是分开的。

要获得非常低级别的内容,您可以自己查看Max Catalyst表达式,并了解在执行时生成的内容和时间。