LoginSignup
6
3

More than 3 years have passed since last update.

Windows環境にてSpark+Pythonを試してみる

Last updated at Posted at 2019-08-21

きっかけ

米国のBigDataの担当者にBigDataを扱うならSparkでSQLとかを分散させるとええでと言われたので、ちょっと試してみようかなという気になったので試してみる。

検証環境

・Windows10 Home (Ver.1803)

環境構築

・JDK
・Spark
・Python

JDK

入っている気がしたので、確認

java -version

2019-08-21_10h49_35.png

もう入ってた。入っていない場合は要インストール。

Python

Anacondaで入れているけど、念のため確認。

python --version

2019-08-21_10h55_51.png

モジュールとしてfindsparkが必要らしいのでインストールしておく

python -m pip install findspark

Spark

これが今回の本筋。

ダウンロード

2019-08-21_10h59_51.png

winutilsも必要になるので、ダウンロードしておく
https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe

配置

解凍して適当なところに置き、そこに対して環境変数を設定

今回は以下に配置
C:\tools\spark-2.4.3-bin-hadoop2.7
※winutils.exeはbinの中に格納

環境変数は
SPARK_HOME,HADOOP_HOME:配置したフォルダ(今回だと[C:\tools\spark-2.4.3-bin-hadoop2.7])
PATH:[%SPARK_HOME%\bin]を追加

確認

spark-shell

2019-08-21_11h44_26.png

使える状態になっている (と思われる)

pyspark

2019-08-21_12h01_58.png

使える状態になっている (と思われる)

試してみる

Anaconda promptでpysparkを実行し以下を流してみる。

import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

df = spark.sql('''select 'spark' as hello ''')
df.show()

2019-08-21_12h26_06.png

動いているような気がする。
が、これで大量データをさばけるのか?という大事な部分がよくわからない。。。

で、もう一つサンプルを実行してみたところ、例外発生。

import json, os, datetime, collections
from pyspark.sql import SQLContext, Row
from pyspark.sql.types import *

csv_file = r"C:\work\20190821\click_data_sample.csv"
print(csv_file)
if not os.path.exists(csv_file):
    print("csv file not found at master node, will download and copy to HDFS")

whole_raw_log = sc.textFile("/user/hadoop/click_data_sample.csv")
header = whole_raw_log.first()
whole_log = whole_raw_log.filter(lambda x:x !=header).map(lambda line: line.split(","))\
            .map(lambda line: [datetime.datetime.strptime(line[0].replace('"', ''), '%Y-%m-%d %H:%M:%S'), int(line[1]), line[2].replace('"', '')])

whole_log.take(3)

上記の

header = whole_raw_log.first()

のところで例外。

2019-08-21_12h22_50.png

  File "C:\tools\spark-2.4.3-bin-hadoop2.7\python\lib\py4j-0.10.7-src.zip\py4j\protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o31.partitions.
: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/user/hadoop/click_data_sample.csv

??
file:/user/hadoop/click_data_sample.csv
はどこを指しているんだろう??
Sparkの環境はできたとしても、もちっと仕組みを知らないと「使う」ことはできなさそうな感じがする。

参考

https://www.guru99.com/pyspark-tutorial.html
https://goodbyegangster.hatenablog.com/entry/2018/06/27/022915
https://knaka20blue.hatenablog.com/entry/20180812/1534035813
https://qiita.com/tomotagwork/items/1431f692387242f4a636
https://qiita.com/taka4sato/items/4ab2cf9e941599f1c0ca
https://qiita.com/miyamotok0105/items/bf3638607ef6cb95f01b

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3