r之sparklyr hadoop配置

mengfanrong 阅读:243 2025-06-02 22:19:02 评论:0

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


标签:Spark
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号