Spark SQL UDF 到 运行 不同表上的相同逻辑

Spark SQL UDF to run same logic on different tables

我想在两个不同的基础 table 上 运行 两次相同的 SQL 逻辑。有没有一种方法可以在 spark 中做到这一点,而不涉及两次编写完全相同的逻辑,只是 table 名称不同?

您可以使用 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 的 transform 方法。如果架构不兼容,您可以将它们作为参数传递。