#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();