apache-spark - spark sql什么时候可以用symbol来表示列?

标签 apache-spark apache-spark-sql

考虑 DataFrame 上的基本 groupBy 表达式:

val groupDf  = rsdf.groupBy("league","vendor").agg(mean('league),mean('vendor))

groupBy 部分很好:它使用字符串作为列名。然而 agg (/mean) 不是 - 因为这里显然不支持 Symbol

我想知道为什么 Symbol 在这里不起作用 - 以及什么时候它们 在 Spark SQL 中被允许。

最佳答案

简短的回答是从不。没有直接支持SymbolsDataFrame方法。

长答案无处不在,Spark 编译器需要 Column,但您需要范围内的其他对象。

Symbols 起作用的唯一原因是从 SymbolColumn 的隐式转换 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/

相关文章:

apache-spark - 如何处理 Spark 写入错误?

mysql - 使用 SPARK 更新 MySQL 行

apache-spark - 如何在 AWS EMR 上将 graphframes 与 pyspark 结合使用?

scala - scala dataframe 中的collect_list 将收集固定列号间隔内的行

python - 如何使用 Apache Spark Dataframes 执行 Switch 语句 (Python)

java - 阅读 Apache Spark 中的多行 JSON 文件后,如何获取嵌套属性作为列?

apache-spark - 与 hive 相比,spark sql 读取表非常慢

r - spark SQL : sqlContext. sql 的 SparklyR 包装器

go - 与 Spark 集成的最佳方式

apache-spark - 为什么类型化 Dataset API 中不使用谓词下推(相对于非类型化 DataFrame API)?