sparklyr hadoop配置

sparklyr hadoopConfiguration

我很抱歉这个问题很难完全重现,因为它涉及到 运行ning spark 上下文(下面称为 sc),但我正在尝试在 sparklyr 中设置一个 hadoopConfiguration,专门用于从 RStudio sparklyr 访问 swift/objectStore 个对象作为 Spark 对象,但通常用于对 hadoopConfiguration 的 scala 调用。像(scala代码):

sc.hadoopConfiguration.set(f"fs.swift.service.$name.auth.url","https://identity.open.softlayer.com"/v3/auth/tokens")

其中 sc 是 运行ning spark 上下文。在 SparkR 中,我可以 运行(R 代码)

hConf = SparkR:::callJMethod(sc, "hadoopConfiguration") 
SparkR:::callJMethod(hConf, "set", paste("fs.swift.service.keystone.auth.url"), paste("https://identity.open.softlayer.com/v3/auth/tokens",sep=""))

在 sparklyr 中,我已经尝试了所有我能想到的咒语,但我最好的猜测是(再次是 R 代码)

sc %>% invoke("set", paste("fs.swift.service.keystone,auth.url"), paste("https://identity.open.softlayer.com/v3/auth/tokens",sep=""))

但这会导致

的非冗长错误(和不规则拼写)
Error in enc2utf8(value) : argumemt is not a character vector

当然,我尝试以我能想到的所有方式对输入进行编码(自然是 enc2utf8(value) 是第一个,但还有许多其他方式,包括列表和 as.character(as.list(. ..)) 这似乎是 sparklyr 编码器的最爱)。任何建议将不胜感激。我梳理了sparklyr的源代码,并没有在sparklyr github中找到任何关于hadoopConfiguration的提及,所以我担心我在核心配置中遗漏了一些非常基本的东西。我还尝试在 spark_connect() 核心调用中的 config.yml 中传递这些配置,但是在将 "fs.swift.service.keystone.auth.url" 设置为 sc$config$s.swift.service.keystone.auth.url 设置,显然未能将这些设置为核心 hadoopConfiguration。

顺便说一下,我正在使用 Spark1.6、scala 2.10、R 3.2.1 和 sparklyr_0.4.19.

我想通了

set_swift_config <- function(sc){
  #get spark_context
  ctx <- spark_context(sc)

  #set the java spark context
  jsc <- invoke_static(
    sc,
    "org.apache.spark.api.java.JavaSparkContext",
    "fromSparkContext",
    ctx
  )

  #set the swift configs:
  hconf <- jsc %>% invoke("hadoopConfiguration")
  hconf %>% invoke("set","fs.swift.service.keystone.auth.url",
                   "https://identity.open.softlayer.com/v3/auth/tokens" )
}

可以是 运行 和 set_swift_config(sc)