У меня есть журналы пользователей, которые я взял из csv и преобразован в DataFrame, чтобы использовать функции запросов SparkSQL. Один пользователь будет создавать многочисленные записи в час, и я хотел бы собрать некоторую базовую статистическую информацию для каждого пользователя; на самом деле просто количество экземпляров пользователя, среднее и стандартное отклонение многочисленных столбцов. Я смог быстро получить информацию о среднем и подсчете, используя groupBy ($ "пользователь" ) и агрегатор с функциями SparkSQL для count и avg:
val meanData = selectedData.groupBy($"user").agg(count($"logOn"),
avg($"transaction"), avg($"submit"), avg($"submitsPerHour"), avg($"replies"),
avg($"repliesPerHour"), avg($"duration"))
Однако я не могу найти столь же элегантный способ вычисления стандартного отклонения. Пока я могу вычислить его только путем сопоставления строки, двойной пары и использования StatCounter(). Утилита stdev:
val stdevduration = duration.groupByKey().mapValues(value =>
org.apache.spark.util.StatCounter(value).stdev)
Однако это возвращает RDD, и я хотел бы попытаться сохранить все это в DataFrame, чтобы дальнейшие запросы были возможны по возвращенным данным.