2016-12-02 57 views
1

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

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

其中sc是运行的火花上下文。在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(值)是第一个,但许多人包括列表和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。

回答

3

我这出

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)中运行。