雑記 in hibernation

頭の整理と備忘録

Google ColaboratoryでPySpark環境構築(v3.2.1)

以前GoogleColabでのPySpark環境構築の方法をまとめたのですが、最近(v3.x.x以降?)はもっと楽にインストールできるっぽいです。ってことで、手順を更新します。

前回の↓

toeming.hatenablog.com


早速ですが、以下notebook上での処理手順

1. Sparkモジュールをマジックコマンドでインストールします

前回に比べるとめっちゃシンプル、、、

!pip install pyspark
Collecting pyspark
  Downloading pyspark-3.2.1.tar.gz (281.4 MB)
     |████████████████████████████████| 281.4 MB 32 kB/s 
Collecting py4j==0.10.9.3
  Downloading py4j-0.10.9.3-py2.py3-none-any.whl (198 kB)
     |████████████████████████████████| 198 kB 44.3 MB/s 
Building wheels for collected packages: pyspark
  Building wheel for pyspark (setup.py) ... done
  Created wheel for pyspark: filename=pyspark-3.2.1-py2.py3-none-any.whl size=281853642 sha256=2407f69057d0e045fa99a817fe2a924a927feb5dafcc8e663201e5138c1fafca
  Stored in directory: /root/.cache/pip/wheels/9f/f5/07/7cd8017084dce4e93e84e92efd1e1d5334db05f2e83bcef74f
Successfully built pyspark
Installing collected packages: py4j, pyspark
Successfully installed py4j-0.10.9.3 pyspark-3.2.1


2. 必要なモジュールをインポートします

"SparkSession - in-memory"以下の出力が得られれば、とりあえずOKらしい。

import pyspark

# SparkContext
from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster("local").setAppName("My App")
sc = SparkContext(conf=conf)

# SparkSession
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate() 

spark
SparkSession - in-memory

SparkContext

Spark UI

Version
v3.2.1
Master
local
AppName
My App


3. 動作確認してみます

使うモジュールをインポートしておきます。 なんかワーニング出てるけどいったんスルー。

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

from pyspark.sql import functions as fn
/usr/local/lib/python3.7/dist-packages/pyspark/sql/context.py:79: FutureWarning: Deprecated in 3.0.0. Use SparkSession.builder.getOrCreate() instead.
  FutureWarning


ど定番のタイタニック生存データをPandasで読み込んで、データの一部をSparkのDataframeに変換してみます。

import pandas as pd
import numpy as np

# テストデータの読み込み
input_data = "/titanic/train.csv"
pdf_input = pd.read_csv(input_data)

# テストデータをSpark DataFrameに変換
sdf_input = sqlContext.createDataFrame(pdf_input[["PassengerId","Name","Fare"]])
sdf_input.show(5)
+-----------+--------------------+-------+
|PassengerId|                Name|   Fare|
+-----------+--------------------+-------+
|          1|Braund, Mr. Owen ...|   7.25|
|          2|Cumings, Mrs. Joh...|71.2833|
|          3|Heikkinen, Miss. ...|  7.925|
|          4|Futrelle, Mrs. Ja...|   53.1|
|          5|Allen, Mr. Willia...|   8.05|
+-----------+--------------------+-------+
only showing top 5 rows


ちゃんと使えました。


おわりに

途中で警告でてるけど、まぁ動いているからヨシ!(仮)