抱歉,此问题很难完全重现,因为它涉及运行中的spark上下文(在下文中称为sc),但是我试图在sparklyr中设置hadoopConfiguration,专门用于从RStudio sparklyr作为Spark对象,但通常是对hadoopConfiguration的scala调用。类似于(标量代码)的内容:

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

其中sc是运行中的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 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)运行。

关于r - sparklyr hadoopConfiguration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40924870/

10-12 19:57