Spark Scala:使用 $ 的符号功能差异?



以下两个表达式之间是否存在功能差异?结果对我来说看起来是一样的,但很好奇是否有未知的未知数。$符号表示什么/如何读取?

df1.orderBy($"reasonCode".asc).show(10, false)

df1.orderBy(asc("reasonCode")).show(10, false)

这两个语句是等效的,将导致相同的结果。

$表示法对于 Scala Spark 来说很特别,指的是一种隐式的StringToColumn方法,该方法将后续字符串"reasonCode"解释为Column

implicit class StringToColumn(val sc: StringContext) {
def $(args: Any*): ColumnName = {
new ColumnName(sc.s(args: _*))
}
}

在 Scala Spark 中,您可以通过多种方式选择列。我已经在另一个答案中写下了语法变体的完整列表,从 Spark 数据框中选择特定列。

使用不同的符号对性能没有任何影响,因为它们都通过Spark的Catalyst优化器转换为同一组RDD指令。

最新更新