Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

きっかけ

米国の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

これが今回の本筋。

ダウンロード

https://spark.apache.org/downloads.html

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

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