Dataproc:Jupyter pyspark notebook 无法导入 graphframes 包
Dataproc: Jupyter pyspark notebook unable to import graphframes package
在 Dataproc spark 集群中,graphframe 包在 spark-shell 中可用,但在 jupyter pyspark notebook 中不可用。
Pyspark 内核配置:
PACKAGES_ARG='--packages graphframes:graphframes:0.2.0-spark2.0-s_2.11'
以下是初始化集群的命令:
gcloud dataproc clusters create my-dataproc-cluster --properties spark.jars.packages=com.databricks:graphframes:graphframes:0.2.0-spark2.0-s_2.11 --metadata "JUPYTER_PORT=8124,INIT_ACTIONS_REPO=https://github.com/{xyz}/dataproc-initialization-actions.git" --initialization-actions gs://dataproc-initialization-actions/jupyter/jupyter.sh --num-workers 2 --properties spark:spark.executorEnv.PYTHONHASHSEED=0,spark:spark.yarn.am.memory=1024m --worker-machine-type=n1-standard-4 --master-machine-type=n1-standard-4
这是 Spark Shell 和 YARN 的一个老错误,我认为在 SPARK-15782 中已修复,但显然这个案例被遗漏了。
建议的解决方法是添加
import os
sc.addPyFile(os.path.expanduser('~/.ivy2/jars/graphframes_graphframes-0.2.0-spark2.0-s_2.11.jar'))
导入之前。
我找到了另一种在 Jupyter notebook 上运行的添加包的方法:
spark = SparkSession.builder \
.appName("Python Spark SQL") \ \
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") \
.getOrCreate()
如果您可以使用 EMR 笔记本,那么您可以在笔记本中使用 install_pypi_package() API 安装额外的 Python libraries/dependencies。这些依赖项(包括传递依赖项,如果有的话)将安装在所有执行程序节点上。
此处有更多详细信息:https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-scoped-libraries.html
最简单的方法是用 pyspark 启动 jupyter,而 graphframes 是从 pyspark 启动 jupyter 并附加附加包
只需打开您的终端并设置两个环境变量,然后使用 graphframes 包
启动pyspark
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=notebook
pyspark --packages graphframes:graphframes:0.6.0-spark2.3-s_2.11
这样做的好处还在于,如果您稍后想通过 spark-submit
运行 您的代码,您可以使用相同的启动命令
在 Dataproc spark 集群中,graphframe 包在 spark-shell 中可用,但在 jupyter pyspark notebook 中不可用。
Pyspark 内核配置:
PACKAGES_ARG='--packages graphframes:graphframes:0.2.0-spark2.0-s_2.11'
以下是初始化集群的命令:
gcloud dataproc clusters create my-dataproc-cluster --properties spark.jars.packages=com.databricks:graphframes:graphframes:0.2.0-spark2.0-s_2.11 --metadata "JUPYTER_PORT=8124,INIT_ACTIONS_REPO=https://github.com/{xyz}/dataproc-initialization-actions.git" --initialization-actions gs://dataproc-initialization-actions/jupyter/jupyter.sh --num-workers 2 --properties spark:spark.executorEnv.PYTHONHASHSEED=0,spark:spark.yarn.am.memory=1024m --worker-machine-type=n1-standard-4 --master-machine-type=n1-standard-4
这是 Spark Shell 和 YARN 的一个老错误,我认为在 SPARK-15782 中已修复,但显然这个案例被遗漏了。
建议的解决方法是添加
import os
sc.addPyFile(os.path.expanduser('~/.ivy2/jars/graphframes_graphframes-0.2.0-spark2.0-s_2.11.jar'))
导入之前。
我找到了另一种在 Jupyter notebook 上运行的添加包的方法:
spark = SparkSession.builder \
.appName("Python Spark SQL") \ \
.config("spark.jars.packages", "graphframes:graphframes:0.5.0-spark2.1-s_2.11") \
.getOrCreate()
如果您可以使用 EMR 笔记本,那么您可以在笔记本中使用 install_pypi_package() API 安装额外的 Python libraries/dependencies。这些依赖项(包括传递依赖项,如果有的话)将安装在所有执行程序节点上。
此处有更多详细信息:https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-scoped-libraries.html
最简单的方法是用 pyspark 启动 jupyter,而 graphframes 是从 pyspark 启动 jupyter 并附加附加包
只需打开您的终端并设置两个环境变量,然后使用 graphframes 包
启动pyspark
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS=notebook
pyspark --packages graphframes:graphframes:0.6.0-spark2.3-s_2.11
这样做的好处还在于,如果您稍后想通过 spark-submit
运行 您的代码,您可以使用相同的启动命令