我有兩個函式,foo和bar,我想寫成以下樣子:
我有兩個函式,foo和bar。
def foo(df : DataFrame, conditionString : String) =
val conditionColumn : Column = something(conditionString) //幫助我定義"something"。
bar(df, conditionColumn)
}
def bar(df : DataFrame, conditionColumn : Column) = {
df.where(conditionColumn)
}
where condition是一個sql字串,比如"person.age >=18 AND person.citizen == true"之類的。
由于原因,我不想在這里改變型別簽名。我覺得這應該是可行的,因為如果我可以改變型別簽名,我可以只寫:
def foobar(df : DataFrame, conditionString : String) = {
df.where(conditionString)
}
因為.where很樂意接受一個sql字串運算式。
那么,我怎樣才能把代表列運算式的字串變成一個列呢?如果這個運算式只是df中的一個列的名稱,我可以只做col(colName),但這似乎并不像.where那樣接受運算式的范圍。
如果你需要了解更多關于我為什么要這樣做的背景,我正在開發一個只能接受字串引數的 databricks 筆記本(并且需要接受一個條件作為引數),它呼叫了一個我想接受列型別引數的庫。
uj5u.com熱心網友回復:
你可以使用functions.expr:
def expr(expr: String)。Column(expr: String).
將運算式字串決議為它所代表的列
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309094.html
標籤:
