sql - Spark SQL UDF 在不同的表上运行相同的逻辑
问题描述
我想在两个不同的基础表上运行相同的 SQL 逻辑两次。有没有办法在火花中做到这一点,不涉及两次编写完全相同的逻辑,只是表名不同?
解决方案
您可以使用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。如果架构不兼容,您可以将这些作为参数传递。
推荐阅读
- powerbi - 将度量与列中的值进行比较
- c# - System.InvalidCastException:无法将“System.Int32”类型的对象转换为“System.String”类型
- scala - 使用 testcontainers 测试 kafka 和 spark
- python - 试图从“in”语句中返回 True False 值
- office-js - Outlook 插件或 Microsoft Exchange:它可以从电子邮件正文中删除元素吗?
- powerapps - Power Apps 库与使用筛选器的联接
- c++ - C++:如何使用 spdlog 打印自定义类指针?
- python-3.x - 使用 UTF-8 编码抓取请求时不显示日文字符
- java - qemu-system-x86_64.exe 没有响应
- css - 无法在电子邮件模板的内联 CSS 中使用字体