Мне нужно разрешить пользователям определять разные именованные коллекции, которые они могут использовать во время последней конструкции Spark DataFrame SQL.
Я планировал использовать для этой цели широковещательные переменные Spark, но исходя из следующего вопроса SO Как ссылаться на широковещательную переменную в Spark DataFrameSQL похоже, что это невозможно
Допустим, как пользователь, я создал следующую коллекцию через пользовательский интерфейс приложения:
name: countries_dict
values: Seq("Italy", "France", "United States", "Poland", "Spain")
В другом пользовательском интерфейсе приложения (давайте изменим страницу), как пользователь, я создал следующий SQL-запрос Spark:
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
жестко закодирован в коде и не создается динамически на основе пользовательского ввода в пользовательском интерфейсе.
Можно ли как-то расширить этот подход для поддержки динамически создаваемых коллекций (пользователями) с именами и элементами через пользовательский интерфейс приложения?