【发布时间】:2018-11-09 10:27:04
【问题描述】:
我需要允许用户定义不同的命名集合,他们可以在稍后构建 Spark DataFrame SQL 时使用。
我计划为此目的使用 Spark 广播变量,但基于以下 SO 问题 How to refer broadcast variable in Spark DataFrameSQL 看起来这是不可能的
假设作为用户,我通过应用程序 UI 创建了以下集合:
name: countries_dict
values: Seq("Italy", "France", "United States", "Poland", "Spain")
在另一个应用程序 UI(让我们在不同的页面)中,作为用户,我创建了以下 Spark SQL 查询:
SELECT name, phone, country FROM users
我想通过SELECT name, phone, country FROM users WHERE countries in countries_dict过滤记录
因此,例如,现在我可以通过以下方式创建类似的东西:
val countriesDict = Seq("Italy", "France", "United States", "Poland", "Spain")
val inDict = (s: String) => {
countriesDict.contains(s)
}
spark.udf.register("in_dict", inDict)
然后:
SELECT name, phone, country FROM users WHERE in_dict(country)
但这种方法的最大问题是,countriesDict 是硬编码在代码中的,而不是根据用户在 UI 上的输入动态创建的。
是否可以以某种方式扩展此方法以支持通过应用程序 UI 使用名称和元素动态创建的集合(由用户)?
【问题讨论】:
标签: scala apache-spark apache-spark-sql