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:使用 $ 的符号的功能差异?的主要内容,如果未能解决你的问题,请参考以下文章

spark scala中的运行时间戳差异

Scala的符号入门

Spark记录-Scala数据类型

Spark记录-Scala模式匹配

scala中常用特殊符号

解释 Spark 中的聚合功能(使用 Python 和 Scala)