[英]Writing a function to use with spark_apply() from sparklyr
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 的值獲取價格列中觀察值之間的差異,其中每個觀察值都取其與每個 prod_id 組中 Dich==1 的觀察值的差異。 這樣做的語法如下。
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 函數應用於 spark 對象的用法。
https://spark.rstudio.com/guides/distributed-r/
下面是一個縮放 spark 數據幀的所有列的函數示例。
trees_tbl %>%
spark_apply(function(e) scale(e))
我想知道如何以解釋用於 spark_apply() 的格式編寫上面的函數。 如果您能解釋如何在函數中包含 e 將會很有幫助,- e 代表什么?
所有的包都需要在 worker 中並且需要找到函數(但是%>%
需要你告訴 worker library(magrittr)
),一種可行的方法是:
trans <- function(e) {
library(magrittr)
e %>%
dplyr::group_by(prod_id) %>%
dplyr::mutate(diff_p = if(any(Dich ==1)) price -price[Dich == 1] else NA)
}
sparklyr::spark_apply(
x = test_sf,
f = trans)
# Source: spark<?> [?? x 5]
prod_id seller_id Dich price diff_p
<chr> <chr> <dbl> <dbl> <dbl>
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
# … with more rows
# ℹ Use `print(n = ...)` to see more rows
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.