将Spark SQL函数转换为“普通” R代码

时间:2018-10-16 07:53:58

标签: r dplyr sparklyr

我正在尝试遵循小插图“如何制作马尔可夫链”(http://datafeedtoolbox.com/attribution-theory-the-two-best-models-for-algorithmic-marketing-attribution-implemented-in-apache-spark-and-r/)。

本教程很有趣,因为它使用的是与我使用的相同的数据源。但是,部分代码正在使用“ Spark SQL代码” (我从上一个问题Concat_ws() function in Sparklyr is missing中得到的回馈)。

我的问题:我在Google上搜索了很多,并试图自己解决。但是我不知道该怎么做,因为我不确切知道数据应该是什么样子(作者没有给出函数前后的DF示例)。

如何将这段代码转换为“普通” R代码(不使用Spark)(特别是:concat_ws和collect_list函数会引起麻烦

他正在使用以下代码行:

channel_stacks = data_feed_tbl %>%
 group_by(visitor_id, order_seq) %>%
 summarize(
   path = concat_ws(" > ", collect_list(mid_campaign)),
   conversion = sum(conversion)
 ) %>% ungroup() %>%
 group_by(path) %>%
 summarize(
   conversion = sum(conversion)
 ) %>%
 filter(path != "") %>%
 collect()

从上一个问题开始,我知道我们可以替换部分代码:

  

concat_ws()可以替换paste()函数

但同样,另一部分代码正在跳转:

collect_list()  # describtion: Aggregate function: returns a list of objects with duplicates.

我希望我尽可能清楚地描述这个问题。

1 个答案:

答案 0 :(得分:1)

paste可以使用collapse参数提供的分隔符折叠字符串向量。

这可以代替concat_ws(" > ", collect_list(mid_campaign))

channel_stacks = data_feed_tbl %>%
     group_by(visitor_id, order_seq) %>%
     summarize(
       path = paste(mid_campaign, collapse = " > "),
       conversion = sum(conversion)
     ) %>% ungroup() %>%
     group_by(path) %>%
     summarize(
       conversion = sum(conversion)
     ) %>%
     filter(path != "")