S3のデータをPySpark + Jupter Notebookで読み込みたいんだ
PySpark、楽しいですね。
AWS GlueなどでETL処理を動かす際にもPySparkが使えるので、使っている方もいるかもしれません。ただ、デバッグはしんどいです。そんなときに使うのがローカルでのPySpark + Jupyter Notebook。インタラクティブにコードの記述・実行を行うことができてデバッグも簡単。
PySpark + Jupyter NotebookはDockerで動かすのが手間がなく便利です。
$ docker run -p 8888:8888 -v $HOME/pyspark-notebook:/home/jovyan/work jupyter/pyspark-notebook start-notebook.sh

こんな感じで動きます。
ただこのままではAWS S3にあるデータを読み書きできません。
対応方法
Jupyter Notebookのセルにおもむろに貼り付けましょう。
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0 pyspark-shell'
import pyspark
sc = pyspark.SparkContext("local[*]")
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
hadoopConf = sc._jsc.hadoopConfiguration()
myAccessKey = input()
mySecretKey = input()
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey", mySecretKey)
df = sqlContext.read.parquet("s3://myBucket/myKey")
S3のデータを読み込むことができました!
実はこのドキュメントに記述されていたのですが、自分は上手く見つけられなかったのでQiitaに書いときます。
https://github.com/jupyter/docker-stacks/blob/master/docs/using/recipes.md#using-pyspark-with-aws-s3
他にもjupyter/pyspark-notebook
使用時に便利なことが色々書いてあるので読んでみるといいかと。