きっかけ
米国のBigDataの担当者にBigDataを扱うならSparkでSQLとかを分散させるとええでと言われたので、ちょっと試してみようかなという気になったので試してみる。
検証環境
・Windows10 Home (Ver.1803)
環境構築
・JDK
・Spark
・Python
JDK
入っている気がしたので、確認
java -version

もう入ってた。入っていない場合は要インストール。
Python
Anacondaで入れているけど、念のため確認。
python --version

モジュールとしてfindsparkが必要らしいのでインストールしておく
python -m pip install findspark
Spark
これが今回の本筋。
ダウンロード

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

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

使える状態になっている (と思われる)
試してみる
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()

動いているような気がする。
が、これで大量データをさばけるのか?という大事な部分がよくわからない。。。
で、もう一つサンプルを実行してみたところ、例外発生。
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()
のところで例外。

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