我正在尝试通过cron作业提交我的pyspark代码。当我手动运行时,它的工作正常。通过cron无法正常工作。
这是我拥有的项目结构:
my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
主要代码位于execute_metrics.py
中的src/jobs
中。我正在使用get_spark_session.py
在execute_metrics.py
中使用from src.utils import get_spark_session
。
我创建了一个shell脚本execute_metric.sh
,其中包含以下内容,用于执行cron作业
#!/bin/bash
PATH=<included entire path here>
spark-submit <included required options> src/jobs/execute_metrics.py
my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh
当我使用./execute_metric.sh
运行此shell脚本时,我可以看到结果。
现在,我需要这样做才能每分钟运行一次作业。因此,我创建了一个具有以下内容的cron文件,并复制到了同一目录
* * * * * ./execute_metric.sh > execute_metric_log.log
my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh
|--execute_cron.crontab
此cron每分钟运行一次,但给我错误:
ModuleNotFoundError: No module named 'src'
有人可以告诉我这里出了什么问题吗?
预先感谢
答案 0 :(得分:1)
您的模块目录未进入python路径。尝试以下操作之一:
明确设置PYTHONPATH
:
#!/bin/bash
PATH=<included entire path here>
PYTHONPATH=somewhere/my-project/src
spark-submit <included required options> src/jobs/execute_metrics.py
从您的项目目录中调用spark shell:
#!/bin/bash
PATH=<included entire path here>
cd somewhere/my-project/src
spark-submit <included required options> execute_metrics.py
答案 1 :(得分:0)
我通过在项目目录中添加main.py
文件来解决此问题,并更改了cron以执行main.py
。现在,项目结构如下:
my-project
|
|--src
|----jobs
|------execute_metrics.py
|----utils
|------get_spark_session.py
|--execute_metric.sh
|--execute_cron.crontab
|--main.py
在main.py
中,我正在调用execute_metrics.py
的功能。