【发布时间】:2021-02-02 04:40:18
【问题描述】:
我正在 Scala 中编写接受 Column 参数并返回一列的方法。在其中,我希望使用类似于下面的逻辑来比较列的值(从整数到日期),但遇到了错误消息。
lit() 仅用于示例目的。事实上,我正在将DataFrame.select() 中的列传递给一种计算方法。我需要使用这些列进行比较。
val test1 = lit(3)
val test2 = lit(4)
if (test1 > test2) {
print("tuff")
}
错误信息。
Error : <console>:96: error: type mismatch;
found : org.apache.spark.sql.Column
required: Boolean
if (test1 > test2) {
在 Spark 中比较 Column 对象的正确方法是什么? documentation 列将 > 运算符列为对比较有效。
编辑:这是一个非常人为的用法示例,假设传递给函数的列是出于业务原因需要与返回的整数值进行比较的日期,该整数值也具有一定的业务意义。
someDataFrame.select(
$"SomeColumn",
computedColumn($"SomeColumn1", $"SomeColumn2").as("MyComputedColumn")
)
computedColumn 在哪里
def computedColumn(col1 : Column, col2: Column) : Column = {
val returnCol : Column = lit(0)
if (col1 > col2) {
returnCol = lit(4)
}
}
除了实际使用之外,computedColumn 中还需要执行更多 if/else 逻辑,最终结果是返回的 Column,它将添加到选择的输出中。
【问题讨论】:
标签: scala apache-spark apache-spark-sql