Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

jupyter/pyspark-notebookからS3に接続する

More than 1 year has passed since last update.

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

https://github.com/jupyter/docker-stacks#quick-start

SS_ 2018-12-20 12.10.40.png

こんな感じで動きます。

ただこのままでは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使用時に便利なことが色々書いてあるので読んでみるといいかと。

crowdworks
21世紀の新しいワークスタイルを提供する日本最大級のクラウドソーシング「クラウドワークス」のエンジニアチームです!
https://crowdworks.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away