这是一个基本问题,但是,我尝试使用以下代码在Apache Spark服务的分析中的Bluemix笔记本中使用Scala中的代码检索文件的内容,并且有关身份验证的错误不断出现。有人有Scala身份验证的示例来访问文件吗?提前谢谢!
我尝试了以下简单的脚本:
Bar
我也尝试过:
<Foo>
我还尝试过上一个问题中的这个脚本:
val file = sc.textFile("swift://notebooks.keystone/kdd99.data")
file.take(1)
错误如下:
名称:org.apache.hadoop.fs.swift.exceptions.SwiftConfigurationException 消息:缺少必需的配置选项:fs.swift.service.keystone.auth.url
修改
这对Python来说是个不错的选择。我尝试了以下,&#34; spark&#34;作为两个不同文件的副本名称:
def setConfig(name:String) : Unit = {
val pfx = "fs.swift.service." + name
val conf = sc.getConf
conf.set(pfx + "auth.url", "hardcoded")
conf.set(pfx + "tenant", "hardcoded")
conf.set(pfx + "username", "hardcoded")
conf.set(pfx + "password", "hardcoded")
conf.set(pfx + "apikey", "hardcoded")
conf.set(pfx + "auth.endpoint.prefix", "endpoints")
}
setConfig("keystone")
答案 0 :(得分:3)
我认为你需要使用&#34; spark&#34;当您尝试从IBM Bluemix Notebook UI访问对象存储时,将其作为configname而不是keystone。
sc.textFile(&#34;迅速://notebooks.spark/2015_small.csv”)
现在这是一个工作样本的例子。
请注意根据对象存储更改容器名称。 containername.configname。
也可以在上面的示例中替换YOUR_DATASOURCE变量中的凭据。
笔记本电脑是默认容器。
谢谢, 查尔斯。
答案 1 :(得分:2)
要从Scala中的Object Store访问文件,以下命令序列在Scala笔记本中有效: (当您执行&#34;插入代码&#34;链接到笔记本数据源中显示的文件时,凭据将填充在单元格中):
IN [1]:
var credentials = scala.collection.mutable.HashMap[String, String](
"auth_url"->"https://identity.open.softlayer.com",
"project"->"object_storage_b3c0834b_0936_4bbe_9f29_ef45e018cec9",
"project_id"->"68d053dff02e42b1a947457c6e2e3290",
"region"->"dallas",
"user_id"->"e7639268215e4830a3662f708e8c4a5c",
"domain_id"->"2df6373c549e49f8973fb6d22ab18c1a",
"domain_name"->"639347",
"username"->"Admin_XXXXXXXXXXXX”,
"password”->”””XXXXXXXXXX”””,
"filename"->"2015_small.csv",
"container"->"notebooks",
"tenantId"->"sefe-f831d4ccd6da1f-42a9cf195d79"
)
在[2]:
credentials("name")="keystone"
在[3]:
def setHadoopConfig(name: String, tenant: String, url: String, username: String, password: String, region: String) = {
sc.hadoopConfiguration.set(f"fs.swift.service.$name.auth.url",url+"/v3/auth/tokens")
sc.hadoopConfiguration.set(f"fs.swift.service.$name.auth.endpoint.prefix","endpoints")
sc.hadoopConfiguration.set(f"fs.swift.service.$name.tenant",tenant)
sc.hadoopConfiguration.set(f"fs.swift.service.$name.username",username)
sc.hadoopConfiguration.set(f"fs.swift.service.$name.password",password)
sc.hadoopConfiguration.setInt(f"fs.swift.service.$name.http.port",8080)
sc.hadoopConfiguration.set(f"fs.swift.service.$name.region",region)
sc.hadoopConfiguration.setBoolean(f"fs.swift.service.$name.public",true)
}
在[4]:
setHadoopConfig(credentials("name"), credentials("project_id"), credentials("auth_url"), credentials("user_id"), credentials("password"), credentials("region"))
在[5]:
var testcount = sc.textFile("swift://notebooks.keystone/2015_small.csv")
testcount.count()
IN [6]:
testcount.take(1)