SparkからのAmazon S3アクセス

s3へのアクセス方法にはs3, s3a, s3nの三種類が存在していて、それぞれ

  • s3 … s3をブロックデバイスとしてアクセス。
  • s3a … Amazon Web Servicesのライブラリ経由のアクセス。
  • s3n … 独自実装によるアクセス。

大抵はs3aが使用できれば事足りる様な気がしています。

sc = pyspark.SparkContext()
confHadoop = sc._jsc.hadoopConfiguration()
confHadoop.set("fs.s3a.access.key", {access key})
confHadoop.set("fs.s3a.secret.key", {secret key})
# S3互換APIのストレージを利用したい場合は、ここでアドレスを個別に設定
# ex) http://192.168.0.1:9000/
# confHadoop.set("fs.s3a.endpoint", {end point})
confHadoop.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")

rawCsv = sc.textFile("s3a://{bucket}/*.csv")

実行する時にpackagesを指定。

$ spark-submit --packages org.apache.hadoop:hadoop-aws:2.7.3 sample1.py