Как передать содержимое столбца в качестве аргумента Dataset.filter () - PullRequest
0 голосов
/ 01 августа 2020

Среда

Spark 2.4.5 с Scala

Проблема

У меня есть две таблицы:

пользователь таблицы

  • столбец user_id: идентификатор пользователя
  • столбец user_name: имя пользователя

условие таблицы

  • столбец condition_id: идентификатор этого condition
  • column expr: строка, которая при передаче в качестве аргумента user_df.filter() (_df означает, что это DataFrame) выберет тех пользователей, для которых выражение оценивается как истинное. Пример этого столбца: "user_id == 1 or user_id == 2"

то, что я хочу: (псевдокод)

-- variable for the final result, initialized as an empty list
-- has type `list of user` (not `list of (list of user)`)
final_users = [] 

for each cond in table condition:
  expr = cond.expr -- now variable expr is a string

  -- an example: (note that a string literal is passed to the function filter)
  -- partial_users = user_df.filter("user_id == 1 or user_id == 2")
  partial_users = user_df.filter(expr)

  partial_users.withColumn("condition_id", cond.condition_id) -- add a new column

  final_users.extend(partial_users)

Как мне реализовать это в Spark (Scala)? (лучше без UDF)

...