【问题标题】:No module named graphframes Jupyter Notebook没有名为 graphframes 的模块 Jupyter Notebook
【发布时间】:2018-10-21 12:08:37
【问题描述】:

我正在关注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(最近调用 最后)在() ----> 1 from graphframes import *

ImportError: 没有名为 graphframes 的模块

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

【问题讨论】:

  • 看起来是一个不错的解决方法。当然,试试,但我想应该有更通用的解决方案。
  • scala> util.Properties.versionNumberString res0: String = 2.12.4

标签: python apache-spark graphframes


【解决方案1】:

好问题!

打开您的 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')

之后,你就可以运行它了。

【讨论】:

    【解决方案2】:

    我在 docker 中使用 jupyter notebook,试图让图形框架工作。首先,我使用https://stackoverflow.com/a/35762809/2202107中的方法,我有:

    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 *
    

    【讨论】:

    • 这比@Pranav A 的答案更好,因为我不需要手动处理路径。
    • 谢谢!这对我有用——谁能帮我理解这里的命令是什么使它起作用?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我经历了漫长的痛苦之路,才找到了一个适合这里的解决方案。

      我正在使用 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 版本。我必须从一个分叉的 repo 安装正确版本的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
      

      【讨论】:

        猜你喜欢
        • 2020-03-05
        • 2018-04-13
        • 2018-12-02
        • 2018-07-21
        • 2017-08-04
        • 2017-06-29
        • 2019-02-13
        • 2020-12-24
        • 2019-03-05
        相关资源
        最近更新 更多