没有名为 graphframes Jupyter Notebook 的模块

No module named graphframes Jupyter Notebook

我正在按照 this 安装指南进行操作,但在使用 graphframes

时遇到以下问题
from pyspark import SparkContext
sc =SparkContext()
!pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11
from graphframes import *

--------------------------------------------------------------------------- ImportError Traceback (most recent call last) in () ----> 1 from graphframes import *

ImportError: No module named graphframes

我不确定是否可以通过以下方式安装包。 但我会感谢你的建议和帮助。

问得好!

打开你的 bashrc 文件,然后输入 export SPARK_OPTS="--packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"。保存 bashrc 文件后,关闭它并键入 source .bashrc.

最后,打开你的笔记本并输入:

from pyspark import SparkContext
sc = SparkContext()
sc.addPyFile('/home/username/spark-2.3.0-bin-hadoop2.7/jars/graphframes-0.5.0-spark2.1-s_2.11.jar')

之后,您也许可以 运行 它。

我在 docker 中使用 jupyter notebook,试图让 graphframes 工作。首先,我使用了中的方法,我有:

import findspark
findspark.init()
import pyspark
import os

SUBMIT_ARGS = "--packages graphframes:graphframes:0.7.0-spark2.4-s_2.11 pyspark-shell"
os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS

conf = pyspark.SparkConf()
sc = pyspark.SparkContext(conf=conf)
print(sc._conf.getAll())

然后通过关注这个问题,我们终于能够import graphframeshttps://github.com/graphframes/graphframes/issues/172

import sys
pyfiles = str(sc.getConf().get(u'spark.submit.pyFiles')).split(',')
sys.path.extend(pyfiles)
from graphframes import *

最简单的方法是用 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 运行 您的代码,您可以使用相同的启动命令

我经历了漫长而痛苦的道路才找到适合这里的解决方案。

我正在 VS 代码中使用本机 jupyter 服务器。在那里,我创建了一个 .env 文件:

SPARK_HOME=/home/adam/projects/graph-algorithms-book/spark-3.2.0-bin-hadoop3.2
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
PYSPARK_SUBMIT_ARGS="--driver-memory 2g --executor-memory 6g --packages graphframes:graphframes:0.8.2-spark3.2-s_2.12 pyspark-shell"

然后在我的 python 笔记本中,我有如下内容:

from pyspark.sql.types import *
from graphframes import *

from pyspark.sql.session import SparkSession
spark = SparkSession.builder.appName('GraphFrames').getOrCreate()

您应该会看到打印出来的代码并相应地获取依赖项。像这样:

:: loading settings :: url = jar:file:/home/adam/projects/graph-algorithms-book/spark-3.2.0-bin-hadoop3.2/jars/ivy-2.5.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
Ivy Default Cache set to: /home/adam/.ivy2/cache
The jars for the packages stored in: /home/adam/.ivy2/jars
graphframes#graphframes added as a dependency
:: resolving dependencies :: org.apache.spark#spark-submit-parent-96a3a1f1-4ea4-4433-856b-042d0269ec1a;1.0
    confs: [default]
    found graphframes#graphframes;0.8.2-spark3.2-s_2.12 in spark-packages
    found org.slf4j#slf4j-api;1.7.16 in central
:: resolution report :: resolve 174ms :: artifacts dl 8ms
    :: modules in use:
    graphframes#graphframes;0.8.2-spark3.2-s_2.12 from spark-packages in [default]
    org.slf4j#slf4j-api;1.7.16 from central in [default]
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |      default     |   2   |   0   |   0   |   0   ||   2   |   0   |
    ---------------------------------------------------------------------

之后,我能够创建一些具有以下关系的代码:

v = spark.createDataFrame([
  ("a", "Alice", 34),
  ("b", "Bob", 36),
  ("c", "Charlie", 30),
], ["id", "name", "age"])

它应该可以正常工作。请记住对齐所有 pyspark 版本。我必须从分叉的仓库安装正确版本的 graphframes。 PiPy 安装落后于版本,所以我不得不使用 PHPirates 存储库来进行正确的安装。这里的 graphframes 已针对 pyspark.

版本 3.2.0 编译
pip install "git+https://github.com/PHPirates/graphframes.git@add-setup.py#egg=graphframes&subdirectory=python"
pip install pyspark==3.2.0