【问题标题】:Scala Spark: Parse SQL string to ColumnScala Spark:将 SQL 字符串解析为列
【发布时间】: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


    【解决方案1】:

    你可以使用functions.expr:

    def expr(expr: String): Column 
    

    将表达式字符串解析到它所代表的列中

    【讨论】:

      猜你喜欢
      • 2022-07-25
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2019-05-03
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多