繁体   English   中英

Azure 数据块 PySpark 自定义 UDF ModuleNotFoundError:没有命名的模块

[英]Azure databricks PySpark custom UDF ModuleNotFoundError: No module named

我正在检查这个 SO 但没有任何解决方案帮助PySpark 自定义 UDF ModuleNotFoundError:没有命名的模块

我在 azure 数据块上有当前的回购协议:

|-run_pipeline.py
|-__init__.py
|-data_science
|--__init.py__
|--text_cleaning
|---text_cleaning.py
|---__init.py__

run_pipeline笔记本上我有这个

from data_science.text_cleaning import text_cleaning
path = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path.append(path)
spark = SparkSession.builder.master(
    "local[*]").appName('workflow').getOrCreate()

df = text_cleaning.basic_clean(spark_df)

text_cleaning.py上,我有一个名为 basic_clean 的 function,它将运行如下内容:

 def basic_clean(df):
    print('Removing links')
    udf_remove_links = udf(_remove_links, StringType())
    df = df.withColumn("cleaned_message", udf_remove_links("cleaned_message"))
    return df

当我在run_pipeline笔记本上执行df.show()时,我收到以下错误消息:

Exception has occurred: PythonException       (note: full exception trace is shown but execution is paused at: <module>)
An exception was thrown from a UDF: 'pyspark.serializers.SerializationError: Caused by Traceback (most recent call last):
  File "/databricks/spark/python/pyspark/serializers.py", line 165, in _read_with_length
    return self.loads(obj)
  File "/databricks/spark/python/pyspark/serializers.py", line 466, in loads
    return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'data_science''. Full traceback below:
Traceback (most recent call last):
  File "/databricks/spark/python/pyspark/serializers.py", line 165, in _read_with_length
    return self.loads(obj)
  File "/databricks/spark/python/pyspark/serializers.py", line 466, in loads
    return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'data_science'

进口不应该工作吗? 为什么这是一个问题?

集群上似乎缺少data-science模块。 请考虑将其安装在集群上。 请检查以下有关将库安装到集群的链接。 https://learn.microsoft.com/en-us/azure/databricks/libraries/cluster-libraries

您可以考虑执行pip list命令来查看集群上安装的库。

您可以考虑直接在笔记本单元中运行pip install data_science命令。 在此处输入图像描述

我在 Azure Devops 中使用 UDF 运行 pyspark 测试时遇到了同样的问题。 我注意到在使用vmImage:ubuntu-latest从池中运行时会发生这种情况。 当我使用来自以下 Dockerfile 的自定义容器构建时,测试运行良好:

FROM python:3.8.3-slim-buster AS py3
FROM openjdk:8-slim-buster

ENV PYSPARK_VER=3.3.0
ENV DELTASPARK_VER=2.1.0

COPY --from=py3 / /

WORKDIR /setup

COPY requirements.txt .

RUN python -m pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt && \
  rm requirements.txt

WORKDIR /code

requirements.txt 包含pyspark==3.3.0delta-spark==2.1.0

这让我得出结论,这是由于 spark 在默认 ubuntu VM 中运行的方式,该 VM 运行 python 3.10.6 和 java 11(在发布时)。 我尝试设置 env 变量,例如PYSPARK_PYTHON以强制 pyspark 使用相同的 python 二进制文件,在该二进制文件上安装了待测试的 package,但无济于事。

也许您可以使用此信息找到一种方法来使用默认代理池的 ubuntu 虚拟机来使其正常工作,否则我建议像我一样使用预配置的容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM