Выражение «id» не присутствует в группе и не является агрегатной функцией. - PullRequest
0 голосов
/ 11 января 2019

При использовании Scala и Spark 1.6.3 мое сообщение об ошибке:

org.apache.spark.sql.AnalysisException: expression 'id' is neither present in the group by, nor is it an aggregate function. 
Add to group by or wrap in first() (or first_value) if you don't care which value you get.;

Код, который генерирует ошибку:

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...|

Существует решение, когда с использованием синтаксиса sql . Что является эквивалентным решением с использованием синтаксиса, который я использую выше (то есть функция withColumn())

1 Ответ

0 голосов
/ 11 января 2019

Проблема в том, что max является агрегатной функцией, которая возвращает максимум столбца, а не максимум массива в каждой строке в этом столбце.

Чтобы получить максимум массива, правильное решение - использовать UDF:

returnDf.withColumn("colName", udf((v : Seq[Double]) => v.max).apply(col("otherCol")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...