LoginSignup
1
2

More than 5 years have passed since last update.

EMRのpysparkでPython3系を使う

Last updated at Posted at 2016-09-15

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を起動する必要があります。

スクリーンショット 2016-09-15 11.14.26.png

[
    {
        "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

参考

1
2
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
1
2