Нет модуля с именем graphframes Jupyter Notebook

Я следую этому руководству по установке, но у меня возникла следующая проблема с использованием 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 из графических фреймов import *

ImportError: нет модуля с именем graphframes

Я не уверен, что можно установить пакет следующим образом. Но я буду благодарен за ваши советы и помощь.

4 ответа

Решение

Хороший вопрос!

Откройте файл 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')

После этого вы можете запустить его.

Я использую блокнот Jupyter в докере, пытаясь заставить работать графические рамки. Во-первых, я использовал метод в /questions/16381549/dobavte-jar-v-avtonomnyij-pyspark/16381573#16381573, у меня есть:

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 graphframes: https://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 *

Самый простой способ - запустить jupyter с pyspark и graphframes - это запустить jupyter из pyspark.

Просто откройте свой терминал, установите две переменные среды и запустите pyspark с пакетом graphframes

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 вы можете использовать ту же команду запуска

Я прошел долгий мучительный путь, чтобы найти решение, которое здесь работает.

Я работаю с собственным сервером jupyter в коде VS. Там я создал .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репо, чтобы выполнить правильную установку. Здесь графические кадры были скомпилированы для версии 3.2.0из pyspark.

      pip install "git+https://github.com/PHPirates/graphframes.git@add-setup.py#egg=graphframes&subdirectory=python"
pip install pyspark==3.2.0
Другие вопросы по тегам