首页 > 解决方案 > Spark SQL UDF 在不同的表上运行相同的逻辑

问题描述

我想在两个不同的基础表上运行相同的 SQL 逻辑两次。有没有办法在火花中做到这一点,不涉及两次编写完全相同的逻辑,只是表名不同?

标签: sqlapache-spark-sqluser-defined-functionsapache-zeppelin

解决方案


您可以使用spark.sql(s"query logic from ${tablename}").

另一种方法是使用未绑定的列,col("column_name")而不是通过数据框引用来引用它们。然后将其包装在一个函数中:

 def processDf(df: DataFrame): DataFrame = {
    df.withColumn("some_col", col("input_col") + lit(5)) 
    // this just an illustration via dummy code
 }

现在,您可以将任何数据框传递给该函数,该函数在其架构中具有 input_col 并且是数字的,并且无论数据框引用如何,这都可以工作。如果出现不兼容的模式和高级用例,我建议从 spark ml 研究 Transformers。

这是 spark ml 中的一种常见模式,用于转换方法,采用 Dataset[_] 并输出 DataFrame。如果架构不兼容,您可以将这些作为参数传递。


推荐阅读