Нет модуля с именем 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