首页 > 解决方案 > Scala Spark:将 SQL 字符串解析为列

问题描述

我有两个函数,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)
}

where 条件是一个 sql 字符串之类的"person.age >= 18 AND person.citizen == true"东西。

由于原因,我不想在这里更改类型签名。我觉得这应该可行,因为如果我可以更改类型签名,我可以写:

def foobar(df : DataFrame, conditionString : String) = {
  df.where(conditionString)
}

As.where很高兴接受一个 sql 字符串表达式。

那么,如何将表示列表达式的字符串转换为列呢?df如果表达式只是I can just do中单个列的名称col(colName),但这似乎并没有占用表达式的范围.where

如果您需要更多上下文来了解我为什么这样做,我正在开发一个只能接受字符串参数(并且需要将条件作为参数)的数据块笔记本,它调用了一个我想采用列类型的库论据。

标签: sqlscalaapache-spark

解决方案


您可以使用functions.expr

def expr(expr: String): Column 

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


推荐阅读