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'

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

Видимо, что-то изменилось во время выполнения блоков данных. Итак, раньше ваш код работал, но больше нет.

Два варианта:

  1. Найдите правильную ошибку
      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")
  1. Следуйте новым инструкциям .
      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

Другие вопросы по тегам