Apache spark 什么时候可以使用符号表示spark sql中的列?
考虑Apache spark 什么时候可以使用符号表示spark sql中的列?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,考虑数据帧上的基本groupBy表达式: val groupDf = rsdf.groupBy("league","vendor").agg(mean('league),mean('vendor)) groupBy部分很好:它使用字符串作为列名。然而,agg(/mean)不支持,因为这里显然不支持符号 我想知道为什么Symbol在这里不起作用,以及它们在Spark SQL中何时被允许使用。简单的答案是从不。没有直接支持符号的DataFrame方法 长答案是无处不在,Spark编译器期望列,但
数据帧上的基本groupBy
表达式:
val groupDf = rsdf.groupBy("league","vendor").agg(mean('league),mean('vendor))
groupBy
部分很好:它使用字符串作为列名。然而,agg
(/mean
)不支持,因为这里显然不支持符号
我想知道为什么Symbol
在这里不起作用,以及它们在Spark SQL中何时被允许使用。简单的答案是从不。没有直接支持符号的DataFrame
方法
长答案是无处不在,Spark编译器期望列
,但您需要范围内的其他对象
符号工作的唯一原因是提供了从Symbol
到Column
的隐式转换
一旦导入,编译器将能够在需要列
时强制转换符号
,包括agg
(隐式在范围内):
import spark.implicits._
import org.apache.spark.sql.functions._
val df = Seq((1, 2)).toDF("league", "vendor")
df.groupBy("league","vendor").agg(mean('league),mean('vendor)).show
+------+------+-----------+-----------+
|league|vendor|avg(league)|avg(vendor)|
+------+------+-----------+-----------+
| 1| 2| 1.0| 2.0|
+------+------+-----------+-----------+