Bluemix Apache Spark服务 - Scala - 读取文件

时间:2016-05-14 18:24:59

标签: scala apache-spark ibm-cloud

这是一个基本问题,但是,我尝试使用以下代码在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")

2 个答案:

答案 0 :(得分:3)

我认为你需要使用&#34; spark&#34;当您尝试从IBM Bluemix Notebook UI访问对象存储时,将其作为configname而不是keystone。

sc.textFile(&#34;迅速://notebooks.spark/2015_small.csv”)

现在这是一个工作样本的例子。

https://console.ng.bluemix.net/data/notebooks/4dda9ee7-bf26-4ebc-bccf-dcb1b7ef63c8/view?access_token=37bff7ab682ee255b753fca485d49de50fed69d2a25217a7c748dd1463222c3b

请注意根据对象存储更改容器名称。 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)