Использование Spark и R для обнаружения трендов во временных рядах

Я новичок как в R, так и в Spark, но я пытаюсь создать масштабируемое R-приложение для обнаружения увеличения / уменьшения запросов, выполняемых пользователями.

У меня есть Spark DataFrame, содержащий данные в следующем формате:

+-------+------------------------+-------------------------+
| user  |         query          |       query_time        |
+-------+------------------------+-------------------------+
| user1 | Hp tablet              | 2011-08-21T11:07:57.346 |
| user2 | Hp tablet              | 2011-08-21T22:22:32.599 |
| user3 | Hp tablet              | 2011-08-22T19:08:57.412 |
| user4 | hp laptop              | 2011-09-05T15:33:31.489 |
| user5 | Samsung LCD 550        | 2011-09-01T10:28:33.547 |
| user6 | memory stick           | 2011-09-06T17:15:42.852 |
| user7 | Castle                 | 2011-08-28T22:06:37.618 |
+-------+------------------------+-------------------------+

Этот набор данных имеет сотни тысяч строк. Мне нужно как-то визуализировать, что, например, "hp tablet" находится в тренде.

Я посмотрел на некоторые библиотеки (например, обнаружение прорыва, обнаружение аномалий и этот вопрос), которые могли бы помочь мне достичь этого, но я не знаю, хорошо ли они работают со Spark. И если они это сделают, я не смог найти примеров того, как заниматься программированием.

Я использую R версии 3.4.0 и SparkR версии 2.1.0, работающие на ноутбуке Zeppelin.

У кого-нибудь есть какие-либо идеи? Я также открыт для любых других подходов. Спасибо!

2 ответа

%r
#created a sparkR dataframe
df_query <- createDataFrame(sqlContext, data.frame(query = c("Hp tablet","Hp tablet","Hp tablet","hp laptop", "Samsung LCD 550 "), 
query_time = c("2011-08-21T11:07:57.346","2011-08-21T22:22:32.599","2011-08-22T19:08:57.412","2011-09-05T15:33:31.489","2011-09-01T10:28:33.547")))

#remove T as its not a timestamp format = "yyyy-MM-dd HH:mm:ss"
df_query_1 <- select(df_query, df_query$query, regexp_replace(df_query$query_time, '(T)', ' '))
+----------------+--------------------------------+
|           query|regexp_replace(query_time,(T), )|
+----------------+--------------------------------+
|       Hp tablet|            2011-08-21 11:07:...|
|       Hp tablet|            2011-08-21 22:22:...|
|       Hp tablet|            2011-08-22 19:08:...|
|       hp laptop|            2011-09-05 15:33:...|
|Samsung LCD 550 |            2011-09-01 10:28:...|
+----------------+--------------------------------+

df_query_1 <-  rename(df_query_1, query_time=df_query_1[[2]])

#registering temp table:
registerTempTable(df_query_1, "temp_query")

Визуализация из временной таблицы, созданной выше:

%sql
select * from temp_query

экран 1 введите описание изображения здесь

экран 2: визуализировать как гистограмму визуализировать как гистограмму

Для использования библиотеки (AnomalyDetection) данные должны быть в этом формате

head(raw_data)
                timestamp   count
14393 1980-10-05 13:53:00 149.801
14394 1980-10-05 13:54:00 151.492
14395 1980-10-05 13:55:00 151.724
14396 1980-10-05 13:56:00 153.776
14397 1980-10-05 13:57:00 150.481
14398 1980-10-05 13:58:00 146.638

если ваш query_time - ось X, как вы будете определять ось Y в цифрах, а в 2011-08-21T11:07:57.346 какие T означает, что это время заняло 11:07:57.346, Нужно больше разъяснений

Другие вопросы по тегам