EMRでのpython3系の使い方
EMRでpysparkを使おうとするとデフォルトでは2系が使われてしまいます。3系をどうせなら使いたいので使い方を調べてみました。
現時点で最新のEMRのバージョンは 5.0.0でSparkは2.0.0が入っています。またPythonのバージョンは2.7.10が使われています。
$ pyspark
Python 2.7.10 (default, Jul 20 2016, 20:53:27)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
16/09/15 02:15:05 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.0.0
/_/
Using Python version 2.7.10 (default, Jul 20 2016 20:53:27)
SparkSession available as 'spark'.
Python3系を使うには以下のようなパラメータをわたしてEMRを起動する必要があります。
[
{
"Classification": "spark-env",
"Properties": {},
"Configurations": [
{
"Classification": "export",
"Properties": {
"PYSPARK_PYTHON": "python34"
},
"Configurations": []
}
]
}
]
$ pyspark
Python 3.4.3 (default, Jul 20 2016, 21:31:36)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel).
16/09/15 02:19:11 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.0.0
/_/
Using Python version 3.4.3 (default, Jul 20 2016 21:31:36)
SparkSession available as 'spark'.
これでPython3.4を使うことができるようになりました。
PYTHONHASHESEEDの設定
Python2系を使っている時には問題ないのですが3系でgroupbyを行おうとしたところ以下のエラーが発生しました。
http://stackoverflow.com/questions/36798833/what-does-exception-randomness-of-hash-of-string-should-be-disabled-via-pythonh
これを回避するにはPYTHONHASHSEEDの環境変数をセットしてあげれば良いのですが、EMRの場合は/usr/lib/spark/conf/spark-defaults.conf
に以下のように追記することでセットできます。
spark.executorEnv.PYTHONHASHSEED 0