考虑 DataFrame
上的基本 groupBy
表达式:
val groupDf = rsdf.groupBy("league","vendor").agg(mean('league),mean('vendor))
groupBy
部分很好:它使用字符串作为列名。然而 agg
(/mean
) 不是 - 因为这里显然不支持 Symbol
。
我想知道为什么 Symbol
在这里不起作用 - 以及什么时候它们 在 Spark SQL 中被允许。
最佳答案
简短的回答是从不。没有直接支持Symbols
的DataFrame
方法。
长答案无处不在,Spark 编译器需要 Column
,但您需要范围内的其他对象。
Symbols 起作用的唯一原因是从 Symbol
到 Column
的隐式转换 SQLImplicits.implicits
.
导入后,只要需要 Column
,编译器就可以转换 Symbol
,包括 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|
+------+------+-----------+-----------+
关于apache-spark - spark sql什么时候可以用symbol来表示列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45465453/