【发布时间】:2021-11-09 18:29:21
【问题描述】:
我有两个函数,foo 和 bar,我想写如下:
def foo(df : DataFrame, conditionString : String) =
val conditionColumn : Column = something(conditionString) //help me define "something"
bar(df, conditionColumn)
}
def bar(df : DataFrame, conditionColumn : Column) = {
df.where(conditionColumn)
}
condition 是一个 sql 字符串,例如 "person.age >= 18 AND person.citizen == true" 或其他东西。
因为一些原因,我不想在这里更改类型签名。我觉得这应该可行,因为如果我可以更改类型签名,我可以写:
def foobar(df : DataFrame, conditionString : String) = {
df.where(conditionString)
}
.where 很乐意接受 sql 字符串表达式。
那么,如何将表示列表达式的字符串转换为列呢?如果表达式只是 df 中单个列的名称,我可以只使用 col(colName),但这似乎并没有占用 .where 的表达式范围。
如果您需要更多关于我为什么这样做的上下文,我正在开发一个只能接受字符串参数(并且需要将条件作为参数)的数据块笔记本,它调用了我想要使用的库列类型的参数。
【问题讨论】:
标签: sql scala apache-spark