Группировать по порядку в Spark SQL

#apache-spark #apache-spark-sql

#apache-spark #apache-искра-sql

Вопрос:

Я пытаюсь получить доступ к данным s3 с помощью приложения spark. Я применяю Spark SQL для извлечения данных. Он не принимает предложение group by.

 DataFrame summaryQuery=sql.sql("Select score from summary order by updationDate desc);
summaryQuery.groupBy("sessionId").count().show();
summaryQuery.show();
  

Также я пробую это напрямую

     DataFrame summaryQuery=sql.sql("Select score from summary group by sessionId order by updationDate desc);
summaryquery.show();
  

Но в обоих случаях я получаю исключение SQL.

 Exception in thread "main" org.apache.spark.sql.AnalysisException: expression 'score' 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.;
  

Пожалуйста, укажите, как я могу запросить эти данные.

Комментарии:

1. чего вы пытаетесь достичь? ваша группа по столбцу должна присутствовать в вашем запросе select, и вам необходимо применить агрегатную функцию. пожалуйста, разместите свой образец набора данных для ввода и вывода, чтобы мы помогли вам достичь результата.

Ответ №1:

В Spark SQL мы должны обернуть это в функцию либо first (имя_столбца), либо last (имя_столбца), либо в любую агрегатную функцию, если имя_столбца отсутствует в предложении group by. Он примет либо первое, либо последнее значение из выбранных строк соответственно.

 DataFrame summaryQuery=sql.sql("Select first(score) from summary group by sessionId order by updationDate desc);
summaryquery.show();