Spark Scala:使用 $ 的符号的功能差异?
Posted
技术标签:
【中文标题】Spark Scala:使用 $ 的符号的功能差异?【英文标题】:Spark Scala: functional difference in notation using $? 【发布时间】:2021-01-12 19:26:42 【问题描述】:以下两个表达式在功能上有区别吗?结果在我看来是一样的,但很好奇是否有未知的未知数。 $
符号表示什么/如何读取?
df1.orderBy($"reasonCode".asc).show(10, false)
df1.orderBy(asc("reasonCode")).show(10, false)
【问题讨论】:
【参考方案1】:这两个语句是等价的,并且会导致相同的结果。
$
表示法是 Scala Spark 的特殊符号,它指的是隐式的 StringToColumn
方法,它将后续字符串“reasonCode”解释为Column
implicit class StringToColumn(val sc: StringContext)
def $(args: Any*): ColumnName =
new ColumnName(sc.s(args: _*))
在 Scala Spark 中,您有多种选择列的方法。我在select specific columns from spark dataframe 的另一个答案中写下了完整的语法变体列表。
使用不同的符号对性能没有任何影响,因为它们都通过 Spark 的 Catalyst 优化器转换为同一组 RDD 指令。
【讨论】:
太好了,谢谢。计算时间有什么不同吗?例如,有些人争论SELECT(1)
与SELECT(*)
对于 SQL 的区别。 F
据我所知,它都是语法糖,最后它被 Spark 的 Catalyst 优化器翻译/编译成相同的 RDD 指令。以上是关于Spark Scala:使用 $ 的符号的功能差异?的主要内容,如果未能解决你的问题,请参考以下文章