我正在尝试使用spark创建到ibmcos(云对象存储)的连接。spark版本=2.4.4,scala版本=2.11.12。
我用正确的凭证在本地运行它,但我发现以下错误-“没有scheme:cos的文件系统”
我正在与错误日志共享代码片段。有人能帮我解决这个问题吗。
提前谢谢!
代码段:
import com.ibm.ibmos2spark.CloudObjectStorage
import org.apache.spark.sql.SparkSession
object CosConnection extends App{
var credentials = scala.collection.mutable.HashMap[String, String](
"endPoint"->"ENDPOINT",
"accessKey"->"ACCESSKEY",
"secretKey"->"SECRETKEY"
)
var bucketName = "FOO"
var objectname = "xyz.csv"
var configurationName = "softlayer_cos"
val spark = SparkSession
.builder()
.appName("Connect IBM COS")
.master("local")
.getOrCreate()
spark.sparkContext.hadoopConfiguration.set("fs.stocator.scheme.list", "cos")
spark.sparkContext.hadoopConfiguration.set("fs.stocator.cos.impl", "com.ibm.stocator.fs.cos.COSAPIClient")
spark.sparkContext.hadoopConfiguration.set("fs.stocator.cos.scheme", "cos")
var cos = new CloudObjectStorage(spark.sparkContext, credentials, configurationName=configurationName)
var dfData1 = spark.
read.format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat").
option("header", "true").
option("inferSchema", "true").
load(cos.url(bucketName, objectname))
dfData1.printSchema()
dfData1.show(5,0)
}
错误:
Exception in thread "main" java.io.IOException: No FileSystem for scheme: cos
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2586)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2593)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2632)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2614)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
3条答案
按热度按时间k3fezbri1#
你必须把
.config("spark.hadoop.fs.stocator.scheme.list", "cos")
以及其他一些人fs.cos...
配置。下面是一个python端到端代码片段示例。转换成scala应该很简单:
osh3o9ms2#
这个问题是通过用spark版本=2.4.4,scala版本=2.11.12Mapstocator依赖项来解决的
一定要有
stocator-1.0.24-jar-with-dependencies.jar
在生成包时在外部库中还要确保将端点作为
s3.us.cloud-object-storage.appdomain.cloud
相反https://s3.us.cloud-object-storage.appdomain.cloud
您可以手动构建stocator jar并包括target/stocator-1.0.24-SNAPSHOT-IBM-SDK.jar
jar到类路径(如果需要)-yruzcnhs3#
我在Windows10上使用的是spark版本2.4.5和scala版本2.11.12。我已经在环境变量中为这两者添加了classpath。
启动spark shell的命令(打开命令提示符并粘贴到命令下方):
spark-shell --packages com.ibm.stocator:stocator:1.0.36
如果你得到下面的细节,这意味着你已经成功地喷枪Spark壳。您还可以在浏览器上检查它,如命令提示符中所示,例如--spark context webuihttp://localhost:4040(在您的情况下,端口可能会更改)。
在scala中设置配置信息(我的cos位置是us east):
从清单文件获取对象列表:
或者,您可以从Parquet文件中读取数据,如下所示: