我想在两个不同的基础表上运行相同的sql逻辑两次。有没有一种方法可以在spark中做到这一点,而不需要在表名不同的情况下编写两次完全相同的逻辑?
2w3rbyxf1#
你可以用 spark.sql(s"query logic from ${tablename}") .另一种方法是通过 col("column_name") 而不是通过Dataframe引用来引用它们。然后把它 Package 成一个函数:
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 }
现在,您可以将任何Dataframe传递给该函数,该函数在其模式中有输入列,并且是数字的,这将在不考虑Dataframe引用的情况下工作。在不兼容的模式和高级用例的情况下,我建议从sparkml中寻找变压器。在spark-ml中,转换方法通常采用dataset[\并输出dataframe。如果架构不兼容,可以将这些作为参数传递。
1条答案
按热度按时间2w3rbyxf1#
你可以用
spark.sql(s"query logic from ${tablename}")
.另一种方法是通过
col("column_name")
而不是通过Dataframe引用来引用它们。然后把它 Package 成一个函数:现在,您可以将任何Dataframe传递给该函数,该函数在其模式中有输入列,并且是数字的,这将在不考虑Dataframe引用的情况下工作。在不兼容的模式和高级用例的情况下,我建议从sparkml中寻找变压器。
在spark-ml中,转换方法通常采用dataset[\并输出dataframe。如果架构不兼容,可以将这些作为参数传递。