Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark-如何获取列中每个值减去最小元素的对数_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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

Scala Spark-如何获取列中每个值减去最小元素的对数,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我想取每个值减去列中最小元素后的对数。例如,如果a的列类似于: 分数:1000、500、1200、300 那么我想: 记录的分数:log700,log200,log900,log0 我在Spark数据框中尝试过: .select(log($"score" - min($"score")).alias("logged_score")) 但我有一个错误: 线程主org.apache.spark.sql.AnalysisException中的异常: 分组表达式序列为空,“分数”不是 聚合函数。将“L

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

分数:1000、500、1200、300

那么我想:

记录的分数:log700,log200,log900,log0

我在Spark数据框中尝试过:

.select(log($"score" - min($"score")).alias("logged_score"))
但我有一个错误:

线程主org.apache.spark.sql.AnalysisException中的异常: 分组表达式序列为空,“分数”不是 聚合函数。将“LOGscore-minscore”包装为 在窗口功能中记录“分数”,或在 第一个或第一个价值,如果你不在乎你得到什么价值


克服这一问题的最简单方法是在获取日志值之前收集最小$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()

谢谢,这个有用。我对select使用类似的方法。还有一个问题,为什么在第三行使用lit?即使没有lit,它似乎也能工作。我只是希望两者都是列类型。