jav*_*dba 4 apache-spark apache-spark-sql
考虑 a 的基本groupBy表达式DataFrame:
val groupDf = rsdf.groupBy("league","vendor").agg(mean('league),mean('vendor))
Run Code Online (Sandbox Code Playgroud)
这groupBy部分很好:它使用字符串作为列名。然而agg(/ mean) 不是-因为显然Symbol这里不支持。
我想知道为什么Symbol's 在这里不起作用 - 以及 Spark SQL 何时允许它们。
简短的回答是永远不会。没有直接DataFrame支持的方法Symbols。
Spark 编译器期望的地方Column都是长答案,但您需要范围内的其他对象。
符号起作用的唯一原因是从Symbol到Column提供的隐式转换SQLImplicits.implicits。
导入后,编译器将能够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|
+------+------+-----------+-----------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2218 次 |
| 最近记录: |