我想用spark來產生combn()
函數的輸出,用於一個相對較大的輸入列表(200 ish)和變化的值m
( 2-5),但是我遇到了麻煩,包括spark_apply()
。我怎樣才能使用spark_apply()來產生組合使用combn()
我目前的做法(based on this)的兆瓦:
names_df <- data.frame(name = c("Alice", "Bob", "Cat"),
types = c("Human", "Human", "Animal"))
combn(names_df$name, 2)
name_tbl <- sdf_copy_to(sc = sc,
x = names_df,
name = "name_table")
name_tbl %>%
select(name) %>%
spark_apply(function(e) combn(e, 2))
錯誤消息輸出很大,但我無法理解如何使用這些信息來改進我的方法。
我期待輸出如MWE的第二行。是combn()
期待的「矢量源」,這不是我所提供的select()
?還是說select沒有返回「一個對象(通常是Spark_tbl)可以被Spark DataFrame強制」?無論哪種方式,有沒有一種方法可以用來實現所需的結果?
我也曾在沒有成功的嘗試嘗試這樣做:
name_tbl %>%
select(name) %>% # removing this also doesn't work
spark_apply(function(e) combn(e$name, 2))
編輯:所以expand.grid
工作正常,這表明,我認爲有一些問題與combn
不能夠歸還給被強制放入一個data.frame。
工作expand.grid
:
name_tbl %>%
spark_apply(function(e) expand.grid(e))
編輯2:
有更緊密地閱讀文檔,我現在也嘗試強迫功能爲data.frame,因爲它說:
您的R功能應設計爲在R數據幀上運行。傳遞給spark_apply的R函數需要一個DataFrame,並將返回一個可以作爲DataFrame轉換的對象。
但是,以下也是不成功的:
name_tbl %>%
spark_apply(function(e) data.frame(combn(e$name, 2)))
name_tbl %>%
select(name) %>%
spark_apply(function(e) data.frame(combn(e, 2)))
我剛剛找到了'expand.grid()'函數。在這種特殊情況下,我認爲我不需要它,但我希望我會爲下一部分工作做好準備。我會感興趣的是,如果有一個使用spark來應用的例子,如果可能的話 – DaveRGP