【发布时间】:2018-01-04 04:21:44
【问题描述】:
我想取每个值减去列中最小元素的对数。例如,如果 a 有这样的列:
分数:1000、500、1200、300
那我想要:
logged_score:log(700)、log(200)、log(900)、log(0)
我在 Spark 数据框中尝试过:
.select(log($"score" - min($"score")).alias("logged_score"))
但是我收到了这个错误:
线程“主”org.apache.spark.sql.AnalysisException 中的异常: 分组表达式序列为空,并且 '
score' 不是 聚合函数。换行 '(LOG((score- min(score))) ASlogged_score)' 在窗口函数中或包装 'score' 在 first() (或 first_value) 如果您不在乎获得哪个值。;;
解决这个问题的最简单方法是在获取日志值之前收集min($"score")。但是,如果有更好的解决方案,我会尽量避免在这里收集。
【问题讨论】:
标签: scala apache-spark apache-spark-sql