Databricks-Connect также возвращает модуль, который не найден для работы с несколькими python файлами - PullRequest
0 голосов
/ 11 июля 2020

В настоящее время я подключаюсь к блокам данных с локальным кодом VS через соединение блоков данных. Но все мои заявки сопровождаются ошибкой «модуль не найден», что означает, что код в других python файлах не найден. Я пробовал:

  1. Переместить код в папку с main.py

  2. импортировать файл внутри функции, которая его использует

  3. добавление файла через sparkContext.addPyFile

Есть ли у кого-нибудь опыт по этому поводу? Или даже лучший способ взаимодействия с блоками данных для python проектов.

Кажется, мой код python выполняется в локальном python env, только искра, связанная с директивой кода, находится в кластере, но кластер не загружает все мои файлы python. затем возникает ошибка.

У меня есть папка с файлами

  • main.py

    lib222.py

    __ init __. py

с классом Foo в lib222.py

основной код:

from pyspark.sql import SparkSession
    
spark = SparkSession.builder.getOrCreate()
    
sc = spark.sparkContext
#sc.setLogLevel("INFO")
    
print("Testing addPyFile isolation")
sc.addPyFile("lib222.py")
from lib222 import Foo
print(sc.parallelize(range(10)).map(lambda i: Foo(2)).collect())

Но у меня возникла ошибка Module not find lib222.

Также, когда я печатаю python версию некоторой системной информации, кажется, что код python выполняется на моем локальном компьютере вместо удаленного драйвера. Моя версия db - 6.6. Подробная ошибка:

> Exception has occurred: Py4JJavaError
An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 6, 10.139.64.8, executor 0): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/databricks/spark/python/pyspark/serializers.py", line 182, in _read_with_length
return self.loads(obj)
File "/databricks/spark/python/pyspark/serializers.py", line 695, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'lib222'
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
File "/databricks/spark/python/pyspark/worker.py", line 462, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/databricks/spark/python/pyspark/worker.py", line 71, in read_command
command = serializer._read_with_length(file)
File "/databricks/spark/python/pyspark/serializers.py", line 185, in _read_with_length
raise SerializationError("Caused by " + traceback.format_exc())
pyspark.serializers.SerializationError: Caused by Traceback (most recent call last):
File "/databricks/spark/python/pyspark/serializers.py", line 182, in _read_with_length
return self.loads(obj)
File "/databricks/spark/python/pyspark/serializers.py", line 695, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'lib222```

1 Ответ

0 голосов
/ 16 августа 2020

Я использую Databricks на AWS, и рекомендую следующие рекомендации:

  • Удалите PySpark из вашей локальной среды, используя pip или conda
  • Create виртуальная среда в вашей локальной системе со средой python, совместимой со средой выполнения Databricks. Наличие виртуальной среды дает вам больше контроля над настройкой и позволяет избежать конфликтов версий. conda create -n ENV_NAME python==PYTHON_VERSION

Дополнительная версия Python вашего клиента должна быть такой же, как и дополнительная версия Python кластера Databricks (3.5, 3.6 или 3.7). Databricks Runtime 5.x имеет Python 3.5, Databricks Runtime 5.x ML имеет Python 3.6, а Databricks Runtime 6.1 и выше и Databricks Runtime 6.1 ML и выше имеют Python 3.7.

Примечание: всегда используйте pip для установки Pyspark, поскольку он указывает на официальный выпуск. Избегайте использования conda или conda-forge для установки PySpark.

  • Следуйте инструкциям в databricks-connect для настройки рабочего пространства- Официальный документ
  • В кластере модулей данных проверьте существующую версию на наличие Pyspark и ее зависимостей. Если я прав, детали версии для зависимостей для последнего кода PySpark следующие:
  • pandas 0,23,2
  • NumPy 1,7
  • pyarrow 0,15 .1
  • Py4J 0.10.9
...