【问题标题】:Using Spark and R for trending detection in time series使用 Spark 和 R 进行时间序列中的趋势检测
【发布时间】:2017-06-05 20:19:19
【问题描述】:

我是 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”正在上升。

我查看了一些可以帮助我实现这一目标的库(例如 Breakout DetectionAnomaly Detectionthis question),但我不知道它们是否能很好地与 Spark 配合使用。如果他们这样做了,我找不到任何关于如何进行编程的示例。

我正在使用 R 版本 3.4.0 和 SparkR 版本 2.1.0,在 Zeppelin Notebook 上运行。

有人有什么想法吗?我也对任何其他方法持开放态度。 谢谢!

【问题讨论】:

    标签: r apache-spark sparkr anomaly-detection


    【解决方案1】:
    %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:可视化为条形图

    【讨论】:

    • 嗨@Arun,非常感谢您的详细回答。因为我是 Spark 的新手,这已经帮助我理解了一些事情,但我认为它并没有回答我原来的问题。我需要能够分辨出哪些查询随着时间的推移越来越受欢迎,所以 X 轴应该是时间序列。我在想也许this Breakout Detection library 可以解决问题,但我不知道如何将它与 SparkR 一起使用。
    【解决方案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。需要更多说明

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2021-11-22
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多