如何使用Spark Catalyst?

时间:2018-07-09 20:52:43

标签: scala apache-spark apache-spark-sql catalyst-optimizer

根据this Spark Catalyst是一个与实现无关的框架,用于处理关系运算符和表达式的树。 我想使用Spark Catalyst解析SQL DML和DDL来编写和生成自定义的Scala代码。但是,通过阅读代码对我来说还不清楚,是否可以使用Catalyst周围的包装类?理想的包装器将接收一个sql语句,并生成等效的Scala代码。对于我的用例,看起来像这样

def generate("select substring(s, 1, 3) as from t1") = 
{ // custom code 
 return custom_scala_code_which is executable given s as List[String]
}

这是一个简单的示例,但是我的想法是我不想编写另一个解析器,而我需要从旧系统中解析许多SQL功能,因此我必须为其编写自定义Scala实现。

在一个更通用的问题中,由于缺少类级别的设计文档,有人如何学习代码库并做出贡献?

2 个答案:

答案 0 :(得分:-1)

Spark使用spark.sql进行SQL查询。例如:在将数据帧定义为“表”之后,只需将字符串SELECT * FROM table作为诸如spark.sql("SELECT * FROM table")之类的参数即可。要将数据框定义为“表”以用于SQL查询,请使用

创建一个临时视图
DataFrame.createOrReplaceTempView("table")

您可以在此处查看示例:

https://spark.apache.org/docs/2.1.0/sql-programming-guide.html#running-sql-queries-programmatically

答案 1 :(得分:-1)

数据帧自动更改为RDD并优化代码,并且此优化是通过Catalyst完成的。当程序员在Dataframe中编写代码时,内部代码将得到优化。有关更多详细信息,visit

Catalyst optimisation in Spark