Je voudrais utiliser spark pour générer la sortie de la fonction combn()
pour une liste relativement grande d'entrées (200 ish), et pour varier les valeurs de m
(2-5), mais j'ai du mal à inclure cela dans spark_apply()
.Comment utiliser spark_apply() pour générer des combinaisons en utilisant combn()
Une MWe de mon approche actuelle (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))
La sortie de message d'erreur est grande, mais je vais avoir du mal à comprendre comment utiliser ces informations pour affiner mon approche.
Je m'attendais à une sortie telle que celle de la deuxième ligne du MWE. Est-ce que le problème combn()
attend une "source vectorielle" qui n'est pas ce que je fournis par select()
? Ou est-ce que select ne renvoie pas "Un objet (habituellement un spark_tbl) coercible à un Spark DataFrame"? De toute façon, existe-t-il une méthode que je peux utiliser pour atteindre le résultat souhaité?
J'ai aussi essayé dans une tentative sans succès:
name_tbl %>%
select(name) %>% # removing this also doesn't work
spark_apply(function(e) combn(e$name, 2))
EDIT: si expand.grid
fonctionne très bien, ce qui me porte à croire qu'il existe un problème avec le retour de combn
ne pas pouvoir être sous la contrainte dans un data.frame.
travail expand.grid
:
name_tbl %>%
spark_apply(function(e) expand.grid(e))
EDIT 2:
Après avoir lu de plus près la documentation, j'ai maintenant essayé de contraindre la fonction dans un data.frame comme il est dit:
Votre fonction R doit être conçue pour fonctionner sur une trame de données R. La fonction R transmise à spark_apply attend un DataFrame et renvoie un objet pouvant être converti en DataFrame.
Cependant, les éléments suivants sont également sans succès:
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)))
Je viens de trouver la fonction 'expand.grid()'. Dans ce cas précis, je ne pense pas en avoir besoin, mais je pense que je le ferai pour la prochaine partie du travail que je dois faire. Je serais intéressé s'il y a un exemple d'utilisation d'étincelle pour appliquer cela aussi bien si possible – DaveRGP