Spark から S3 にアクセスする

 
Spark から S3 のファイルを開きたかったのでメモ

~/.profile に AWS Access Key と Secret を追加する。
下記の replace_here は正しいキーとシークレットに書き換える。

# vim ~/.profile
export AWS_ACCESS_KEY_ID="replace_here"
export AWS_SECRET_ACCESS_KEY="replace_here"

Pyspark 実行時に依存ライブラリを指定すればインストールしてくれる。
使ってる Spark/Hadoop のバージョンに合わせて下記を実行。

pyspark --packages org.apache.hadoop:hadoop-aws:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.12.637

必要な jar ファイルのダウンロードが始まるのでしばらく待ったら使える。

で、コードを実行

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("ReadFromS3") \
#    .config("spark.hadoop.fs.s3a.access.key", "replace_here") \ 
#    .config("spark.hadoop.fs.s3a.secret.key", "replace_here") \
    .getOrCreate()

df = spark.read.csv("s3a://orenomemo-s3-test/orders.csv", header=True, inferSchema=True)
df.show()

上記の spark.hadoop.fs.s3a.access.keyspark.hadoop.fs.s3a.secret.key は環境変数で宣言してるからなくもOK.