Spark - 如何取列中每个值减去最小元素的对数



我想取每个值的对数减去列中的最小元素。例如,如果 a 有类似这样的列:

成绩: 1000,

500, 1200, 300

然后我想要:

logged_score: 日志(700(, 日志(200(, 日志(900(, 日志(0(

我在 Spark 数据框中尝试过这个:

.select(log($"score" - min($"score")).alias("logged_score"))

但是我得到了这个错误:

线程"main"中的异常 org.apache.spark.sql.AnalysisException: 分组表达式序列为空,并且 ' score ' 不是 聚合函数。Wrap '(LOG(( score - min( score ((( AS logged_score (' 在窗口函数中或将 ' score ' 换入 first(((或first_value(如果你不在乎你得到哪个值。

解决此问题的最简单方法是在获取日志值之前通过收集min($"score")来获取。但是,如果有更好的解决方案,我试图避免在这里进行收集。

您可以简单地执行以下操作

import org.apache.spark.sql.functions._
val minimumValue = df.select(min("score")).first()(0)
df.withColumn("logged_score", log($"score" - lit(minimumValue))).na.fill(0).show()

相关内容

  • 没有找到相关文章

最新更新