使用常规 Jupyter Notebook 导入 PySpark 包

Posted

技术标签:

【中文标题】使用常规 Jupyter Notebook 导入 PySpark 包【英文标题】:Import PySpark packages with a regular Jupyter Notebook 【发布时间】:2016-02-28 16:07:47 【问题描述】:

除了正确导入包之外,pyspark 实际上在做什么?是否可以使用常规的jupyter notebook 然后导入所需的内容?

【问题讨论】:

没有反对pyspark,只是想了解 Spark (PySpark) 的工作原理。 【参考方案1】:

是的,这是可能的,但可能会很痛苦。虽然单独使用 Python 不是问题,您只需要设置 $SPARK_HOME,添加 $SPARK_HOME/python(如果无法访问,否则 $SPARK_HOME/python/lib/py4j-[VERSION]-src.zip)PySpark 脚本也可以处理 JVM 设置(--packages--jars --conf等)。

这可以使用PYSPARK_SUBMIT_ARGS 变量或$SPARK_HOME/conf 来处理(参见例如How to load jar dependenices in IPython Notebook)。

有一个旧的blog post from Cloudera 描述了示例配置,据我所知,它仍然有效。

【讨论】:

如果我想发送我自己的py 库,它有几个类等,怎么样? @AlbertoBonsanto 像往常一样。如果可能,安装在工作人员上或使用 PyFiles 发送。您对此有什么问题吗? 文档很模糊,我试图在PythonScala都没有任何积极的结果,我必须再试一次。【参考方案2】:

您可以考虑为 Jupyter 创建一个 pySpark 内核 - 它会为您导入 pyspark 包。

创建文件(需要先创建目录;对于旧版本,它可能位于其他位置):

~/.local/share/jupyter/kernels/pyspark/kernel.json

内容如下:


 "display_name": "pySpark (Spark 1.6.0)",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "IPython.kernel",
  "-f",
  "connection_file"
 ],
 "env": 
  "SPARK_HOME": "/usr/local/lib/spark-1.6.0-bin-hadoop2.6",
  "PYTHONPATH": "/usr/local/lib/spark-1.6.0-bin-hadoop2.6/python/:/usr/local/lib/spark-1.6.0-bin-hadoop2.6/python/lib/py4j-0.9-src.zip",
  "PYTHONSTARTUP": "/usr/local/lib/spark-1.6.0-bin-hadoop2.6/python/pyspark/shell.py",
  "PYSPARK_SUBMIT_ARGS": "pyspark-shell"
 

适当更改 Spark 的路径。

【讨论】:

【参考方案3】:

假设您尚未创建上下文,我喜欢使用PYSPARK_SUBMIT_ARGS 设置提交参数:

import os

os.environ['PYSPARK_SUBMIT_ARGS'] = '--driver-memory 15g --packages com.databricks:spark-csv_2.10:1.3.0 pyspark-shell'

【讨论】:

以上是关于使用常规 Jupyter Notebook 导入 PySpark 包的主要内容,如果未能解决你的问题,请参考以下文章

使用jupyter notebook时导入文件时出错

使用 Python 3 从另一个目录中的模块导入本地函数,并在 Jupyter Notebook 中进行相对导入

Jupyter Notebook 不导入任何模块

如何让 Jupyter Notebook 自动导入代码?

Elasticsearch:使用 Jupyter Notebook 创建 Python 应用导入 CSV 文件

Elasticsearch:使用 Jupyter Notebook 创建 Python 应用导入 CSV 文件