ModuleNotFoundError: нет модуля с именем pyspark.dbutils
Я запускаю pyspark из записной книжки для машинного обучения Azure. Я пытаюсь переместить файл с помощью модуля dbutil.
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
def get_dbutils(spark):
try:
from pyspark.dbutils import DBUtils
dbutils = DBUtils(spark)
except ImportError:
import IPython
dbutils = IPython.get_ipython().user_ns["dbutils"]
return dbutils
dbutils = get_dbutils(spark)
dbutils.fs.cp("file:source", "dbfs:destination")
Я получил эту ошибку: ModuleNotFoundError: Нет модуля с именем "pyspark.dbutils". Есть ли обходной путь для этого?
Вот ошибка в другой записной книжке машинного обучения Azure:
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-183f003402ff> in get_dbutils(spark)
4 try:
----> 5 from pyspark.dbutils import DBUtils
6 dbutils = DBUtils(spark)
ModuleNotFoundError: No module named 'pyspark.dbutils'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-1-183f003402ff> in <module>
10 return dbutils
11
---> 12 dbutils = get_dbutils(spark)
<ipython-input-1-183f003402ff> in get_dbutils(spark)
7 except ImportError:
8 import IPython
----> 9 dbutils = IPython.get_ipython().user_ns["dbutils"]
10 return dbutils
11
KeyError: 'dbutils'
2 ответа
Это известная проблема с утилитами Databricks - DButils.
Большинство DButils не поддерживаются для Databricks Connect. Единственные части, которые делают работу в фс и секреты.
Ссылка: Databricks Connect - Ограничения и известные проблемы.
Примечание: в настоящее время fs и секреты работают (локально). Не работают виджеты (!!!), библиотеки и т.д. Это не должно быть серьезной проблемой. Если вы выполните Databricks с помощью dbutils задач Python, произойдет сбой с ошибкой:
ImportError: No module named 'pyspark.dbutils'
Я могу успешно выполнить запрос, запустив его как записную книжку.
Видимо, что-то изменилось во время выполнения блоков данных. Итак, раньше ваш код работал, но больше нет.
Два варианта:
- Найдите правильную ошибку
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
def get_dbutils(spark):
try:
from pyspark.dbutils import DBUtils
dbutils = DBUtils(spark)
except ModuleNotFoundError: # <-- changed from ImportError
import IPython
dbutils = IPython.get_ipython().user_ns["dbutils"]
return dbutils
dbutils = get_dbutils(spark)
dbutils.fs.cp("file:source", "dbfs:destination")
- Следуйте новым инструкциям .
def get_dbutils(spark):
if spark.conf.get("spark.databricks.service.client.enabled") == "true":
from pyspark.dbutils import DBUtils
return DBUtils(spark)
else:
import IPython
return IPython.get_ipython().user_ns["dbutils"]
Если вы пытаетесь сделать это для модульного тестирования и вам нужно его высмеять, посмотрите это: /questions/40729126/kak-izdevatsya-nad-importom/66338967#66338967