spark sqludf在不同的表上运行相同的逻辑

uemypmqf  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(422)

我想在两个不同的基础表上运行相同的sql逻辑两次。有没有一种方法可以在spark中做到这一点,而不需要在表名不同的情况下编写两次完全相同的逻辑?

2w3rbyxf

2w3rbyxf1#

你可以用 spark.sql(s"query logic from ${tablename}") .
另一种方法是通过 col("column_name") 而不是通过Dataframe引用来引用它们。然后把它 Package 成一个函数:

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

现在,您可以将任何Dataframe传递给该函数,该函数在其模式中有输入列,并且是数字的,这将在不考虑Dataframe引用的情况下工作。在不兼容的模式和高级用例的情况下,我建议从sparkml中寻找变压器。
在spark-ml中,转换方法通常采用dataset[\并输出dataframe。如果架构不兼容,可以将这些作为参数传递。

相关问题