2017-06-05 3 views
0

Je suis novice à la fois pour R et pour Spark, mais j'essaie de créer une application R évolutive pour détecter les requêtes croissantes/décroissantes exécutées par les utilisateurs.Utilisation de Spark et R pour la détection de tendance dans les séries chronologiques

J'ai un dataframe Spark contenant des données dans le format suivant:

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

Cet ensemble de données a des centaines de milliers de lignes. Je dois être en mesure de visualiser en quelque sorte que, par exemple, "tablette HP" est à la hausse.

J'ai regardé certaines bibliothèques (par exemple Breakout Detection, Anomaly Detection et this question) qui pourraient me aider à atteindre cet objectif, mais je ne sais pas s'ils jouent bien avec Spark. Et s'ils le font, je n'ai pas trouvé d'exemples sur la façon de mener la programmation. J'utilise R version 3.4.0 et SparkR version 2.1.0, en cours d'exécution sur un ordinateur portable Zeppelin.

Quelqu'un a-t-il des idées? Je suis également ouvert à toute autre approche. Merci!

Répondre

0
%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") 

visualisation de table temporaire créé ci-dessus:

%sql 
select * from temp_query 

écran 1 enter image description here

écran 2: visualiser comme diagramme à barres visualize as bar graph

+0

Salut @Arun, merci beaucoup pour votre réponse détaillée. Parce que je suis nouveau à Spark, cela m'aide déjà à comprendre certaines choses, mais je pense que cela ne répond pas à ma question initiale. Je dois être capable de dire quelles requêtes gagnent en popularité avec le temps, donc l'axe X devrait être la série temporelle. Je pensais que peut-être [cette bibliothèque Breakout Detection] (https://github.com/twitter/BreakoutDetection) ferait l'affaire, mais je ne sais pas comment l'utiliser avec SparkR. –

0

Pour l'utilisation de la bibliothèque (AnomalyDetection), les données doivent être dans ce format

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 

si votre query_time est axe X comment allez-vous définir l'axe Y en numérique, et en 2011-08-21T11:07:57.346 ce T signifie, est que le temps pris est 11:07:57.346. Besoin de plus de précisions