Как использовать пакеты в spark_apply в R? - PullRequest
0 голосов
/ 11 января 2019

Мне требуется использовать пакеты R с функцией spark_apply в пакете sparklyr. Документ r * не совсем понятен. Я пытался заставить spark_apply работать по этой ссылке . Он работал для первой части со следующими модификациями.

Рабочая часть:

library(sparklyr)

spark_apply_bundle(packages = T, base_path = getwd())

bundle <- paste(getwd(), list.files()[grep("\\.tar$",list.files())][1], sep = "/")

hdfs_path <- "hdfs://<my-ip>/user/hadoop/R/packages/packages.tar"
system("hdfs dfs -moveFromLocal", bundle, "hdfs://<my-ip>/user/hadoop/R/packages")

config <- spark_config()

config$sparklyr.shell.files <- "hdfs://<my-ip>/user/hadoop/R/packages/packages.tar"

sc <- spark_connect(master = "yarn-client", 
                    version = "2.4.0", 
                    config = config)
mtcars_sparklyr <- copy_to(sc, mtcars)

Однако, когда я пытаюсь использовать функцию svm в spark_apply, она не работает с аргументом packages.

result <- mtcars_sparklyr %>%
  spark_apply(
    function(d) {
      fit <- svm(d$mpg, d$wt)
      sum(fit$residuals ^ 2)
      },
    group_by = "cyl",
    packages = bundle
  )

Следующее, с другой стороны, работает. Это если я передам функцию svm в context. Тем не менее, я требую, чтобы аргумент packages работал, потому что у меня есть несколько пакетов и их функций для использования в spark_apply.

result <- mtcars_sparklyr %>%
  spark_apply(
    function(d) {
      fit <- svm(d$mpg, d$wt)
      sum(fit$residuals ^ 2)
    },
    group_by = "cyl",
    context = {svm <- e1071::svm}
  )
...