Написание функции для использования с spark_apply () из sparklyr - PullRequest
0 голосов
/ 04 декабря 2018
test <- data.frame('prod_id'= c("shoe", "shoe", "shoe", "shoe", "shoe", "shoe", "boat", "boat","boat","boat","boat","boat"), 
               'seller_id'= c("a", "b", "c", "d", "e", "f", "a","g", "h", "r", "q", "b"), 
               'Dich'= c(1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0),
               'price' = c(120, 20, 10, 4, 3, 4, 30, 43, 56, 88, 75, 44)
                )
test

       prod_id seller_id Dich price
 1     shoe         a    1   120
 2     shoe         b    0    20
 3     shoe         c    0    10
 4     shoe         d    0     4
 5     shoe         e    0     3
 6     shoe         f    0     4
 7     boat         a    0    30
 8     boat         g    0    43
 9     boat         h    1    56
10     boat         r    0    88
11     boat         q    0    75
12     boat         b    0    44

Я хотел создать новый столбец, который берет разницу между наблюдениями в ценовом столбце на основе значения Dich, где каждое наблюдение берет свое отличие от наблюдения, где Dich == 1 в каждой группе prod_id.Синтаксис для этого приведен ниже.

test %>% 
group_by(prod_id) %>% 
mutate(diff_p = if(any(Dich ==1)) price - price[Dich == 1] else NA)

       prod_id seller_id Dich price diff_p
 1     shoe         a    1   120      0
 2     shoe         b    0    20     -100
 3     shoe         c    0    10     -110
 4     shoe         d    0     4     -116
 5     shoe         e    0     3     -117
 6     shoe         f    0     4     -116
 7     boat         a    0    30     -26
 8     boat         g    0    43     -13
 9     boat         h    1    56       0
10     boat         r    0    88      32
11     boat         q    0    75      19
12     boat         b    0    44     -12

Теперь я хотел бы создать функцию, которая использует тот же синтаксис, где я могу использовать функцию на новом фрейме данных и получить те же результаты с помощью sparklyr :: spark_apply().

trans <- function(e) {e %>%
         group_by(prod_id) %>% 
         mutate(diff_p = if(any(Dich ==1)) price -price[Dich == 1] else NA)
         }

На своем веб-сайте rstudio обсуждает использование функций R для искровых объектов.

https://spark.rstudio.com/guides/distributed-r/

Вот пример функцииэто масштабирует все столбцы искрового фрейма данных.

 trees_tbl %>%
 spark_apply(function(e) scale(e))

Мне интересно, как я мог бы написать функцию выше в формате, объясненном для использования с spark_apply ().Было бы полезно, если бы вы могли объяснить, как включить e в функцию, - что это означает?

...