2017-10-20 18 views
1

pysparkコードからS3バケットに格納されているファイルにアクセスしようとしています。添付されたエラーメッセージが表示されます。 ローカルに保存されたファイルを操作する場合、プログラムは正常に動作します。 私はs3://、s3a://、s3n://を使ってみましたが、どれもうまくいかないようです。S3バケットのファイルをpysparkからアクセスする

コード:

ACCESS_KEY = "*********" 
SECRET_KEY = "**********" 
EncodedSecretKey = SECRET_KEY.replace("/", "%2F") 
s3url="s3n://"+ACCESS_KEY+":"+EncodedSecretKey+"@"+bucket_name+"/"+file_name 

sqlContext.read.option("delimiter",delimiter).load(s3url, 
        format='com.databricks.spark.csv', 
        header='true', 
        inferSchema='true') 

あなたはAWSのパッケージをロードする必要がエラーメッセージ

Traceback (most recent call last): 
    File "C:\Users\sachari\AppData\Local\Temp\zeppelin_pyspark-5481670497409059953.py", line 367, in <module> 
    raise Exception(traceback.format_exc()) 
Exception: Traceback (most recent call last): 
    File "C:\Users\sachari\AppData\Local\Temp\zeppelin_pyspark-5481670497409059953.py", line 355, in <module> 
    exec(code, _zcUserQueryNameSpace) 
    File "<stdin>", line 14, in <module> 
    File "<stdin>", line 10, in get_df 
    File "C:\zeppelin\interpreter\spark\pyspark\pyspark.zip\pyspark\sql\readwriter.py", line 149, in load 
    return self._df(self._jreader.load(path)) 
    File "C:\zeppelin\interpreter\spark\pyspark\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 1133, in __call__ 
    answer, self.gateway_client, self.target_id, self.name) 
    File "C:\zeppelin\interpreter\spark\pyspark\pyspark.zip\pyspark\sql\utils.py", line 63, in deco 
    return f(*a, **kw) 
    File "C:\zeppelin\interpreter\spark\pyspark\py4j-0.10.4-src.zip\py4j\protocol.py", line 319, in get_return_value 
    format(target_id, ".", name), value) 
Py4JJavaError: An error occurred while calling o537.load. 
: java.io.IOException: No FileSystem for scheme: s3n 
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584) 
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591) 
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91) 
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630) 
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612) 
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370) 
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:372) 
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$14.apply(DataSource.scala:370) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241) 
    at scala.collection.immutable.List.foreach(List.scala:381) 
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241) 
    at scala.collection.immutable.List.flatMap(List.scala:344) 
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:370) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:135) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 
    at py4j.Gateway.invoke(Gateway.java:280) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:214) 
    at java.lang.Thread.run(Unknown Source) 
+0

「s3n」は使用しないでください。スキーム「s3a」または「s3」を使用 – mrsrinivas

+0

[sparkはS3からsc.textFile( "s3n:// ...]を使用してファイルを読み込みます)の複製を作成できます(https://stackoverflow.com/questions/30851244/spark-read -file-from-s3-using-sc-textfile-s3n) – Mariusz

答えて

0

は、 pysparkシェルのためにあなたが以下のようにパッケージをロードする必要があり、それはまたに動作していますspark-submitコマンド。あなたは下のリンクのように証明書を設定する必要があり

pyspark --packages org.apache.hadoop:hadoop-aws:2.7.1 

または

https://hadoop.apache.org/docs/r2.7.2/hadoop-aws/tools/hadoop-aws/index.html

関連する問題