24
4

5 に答える 5

9

はい、s3n代わりに使用する必要がありs3ます。s3S3の奇妙な乱用であり、その利点は私には不明です。

sc.hadoopFile認証情報をまたはsc.newAPIHadoopFile呼び出しに渡すことができます。

rdd = sc.hadoopFile('s3n://my_bucket/my_file', conf = {
  'fs.s3n.awsAccessKeyId': '...',
  'fs.s3n.awsSecretAccessKey': '...',
})
于 2015-04-04T10:21:57.147 に答える
3

から資格情報を読み取る方法の解決策を次に示します~/.aws/credentials。これは、クレデンシャル ファイルが Python の configparser で解析できる INI ファイルであるという事実を利用しています。

import os
import configparser

config = configparser.ConfigParser()
config.read(os.path.expanduser("~/.aws/credentials"))

aws_profile = 'default' # your AWS profile to use

access_id = config.get(aws_profile, "aws_access_key_id") 
access_key = config.get(aws_profile, "aws_secret_access_key") 

https://gist.github.com/asmaier/5768c7cda3620901440a62248614bbd0の私の要点も参照してください。

于 2017-09-08T16:49:12.400 に答える
3

この問題は、実際には Amazon のbotoPython モジュールのバグでした。問題は、MacPort のバージョンが実際には古いという事実に関連していました: botopip を介してインストールすると問題が解決しました:~/.aws/credentials正しく読み取られました。

より多くの経験を積んだ今、一般的に (2015 年末の時点で) Amazon Web Services ツールと Spark/PySpark にはパッチの多いドキュメントがあり、非常に簡単に遭遇する深刻なバグがいくつかあると言えます。最初の問題については、最初にawsコマンドラインインターフェースを更新し、boto何か奇妙なことが起こるたびにSparkを更新することをお勧めします.これにより、すでにいくつかの問題が「魔法のように」解決されました.

于 2015-04-23T11:40:24.330 に答える
1

環境変数のセットアップが役立ちます。

Spark FAQの「S3 のデータにアクセスするにはどうすればよいですか?」という質問の下にあります。環境変数AWS_ACCESS_KEY_IDを設定することをお勧めします。AWS_SECRET_ACCESS_KEY

于 2016-03-30T11:07:22.333 に答える
0

hadoopFile 関数に渡さなければならない Java オブジェクトについて多くを語ることはできませんが、この関数はすでに一部の「newAPIHadoopFile」で廃止されているようです。これに関するドキュメントは非常に大ざっぱで、すべてが何を意味するのかを本当に理解するには、Scala/Java を知る必要があると思います。その間、s3 データを実際に pyspark に取り込む方法を見つけたので、その結果を共有したいと思いました。このドキュメント: Spark API ドキュメントでは、Java 構成 (XML) に変換される dict を使用すると書かれています。Java の構成を見つけました。これはおそらく、dict に入力する必要がある値を反映しているはずです: How to access S3/S3n from local hadoop installation

bucket = "mycompany-mydata-bucket"
prefix = "2015/04/04/mybiglogfile.log.gz"
filename = "s3n://{}/{}".format(bucket, prefix)

config_dict = {"fs.s3n.awsAccessKeyId":"FOOBAR",
               "fs.s3n.awsSecretAccessKey":"BARFOO"}

rdd = sc.hadoopFile(filename,
                    'org.apache.hadoop.mapred.TextInputFormat',
                    'org.apache.hadoop.io.Text',
                    'org.apache.hadoop.io.LongWritable',
                    conf=config_dict)

このコード スニペットは、最初の 2 行で指定されたバケットとプレフィックス (バケット内のファイル パス) からファイルを読み込みます。

于 2015-04-23T09:44:20.423 に答える