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 表达式';id';既不存在于group by中,也不是聚合函数_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 表达式';id';既不存在于group by中,也不是聚合函数

Scala 表达式';id';既不存在于group by中,也不是聚合函数,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,使用Scala和Spark 1.6.3,我的错误消息是: org.apache.spark.sql.AnalysisException:表达式“id”既不在group by中,也不是聚合函数。 如果您不在乎获得哪个值,则添加到group by或wrap in first()(或first_值)。; 生成错误的代码是: returnDf.withColumn("colName", max(col("otherCol")) DataFrame returnDf如下所示: +---+-------

使用Scala和Spark 1.6.3,我的错误消息是:

org.apache.spark.sql.AnalysisException:表达式“id”既不在group by中,也不是聚合函数。
如果您不在乎获得哪个值,则添加到group by或wrap in first()(或first_值)。;
生成错误的代码是:

returnDf.withColumn("colName", max(col("otherCol"))
DataFrame returnDf如下所示:

+---+--------------------+
|id | otherCol|
+---+--------------------+
|1.0|[0.0, 0.217764172...|
|2.0|          [0.0, 0.0]|
|3.0|[0.0, 0.142646382...|
|4.0|[0.63245553203367...|

当出现这种情况时,有一个解决方案。使用我上面使用的语法(即
withColumn()
函数)的等效解决方案是什么?

问题是
max
是一个聚合函数,它返回列的最大值,而不是该列中每行数组的最大值

要获得阵列的最大值,正确的解决方案是使用UDF:

returnDf.withColumn("colName", udf((v : Seq[Double]) => v.max).apply(col("otherCol")))

在使用聚合函数之前,需要执行groupBy操作:
returnDf.groupBy(col(“id”)).agg(max(“otherCol”))

那么您实际上是在数组中寻找一个最大值,不是吗?如果是这样的话,您根本不能使用
max
(这并不是说它可以应用于
数组
列)。在2.4中,您可以使用高阶函数,但在1.6中,您必须像
udf((xs:Seq[Double]=>xs.max)
一样使用
udf
。为了让其他人更容易阅读您的答案,请尝试对代码段使用代码格式。有关信息,请参阅。