Spark集群中能否通过Python类名而非文件路径提交任务?
实现通过类名/模块名直接提交PySpark任务的方法
你可以通过以下几种方式实现无需输入完整路径、直接基于模块/类名提交任务的需求——Spark本身没有--python-class这类原生参数,但可以借助Python的模块运行机制来达成:
使用Python模块运行参数
-m
因为你的包已经在Spark可访问的site-packages目录中,直接通过模块路径指定脚本即可:spark-submit -m etl.etl注意要确保
etl.py文件中包含入口逻辑,比如:# etl/etl.py class Etl: def run(self): # 你的ETL业务逻辑 pass if __name__ == "__main__": etl_job = Etl() etl_job.run()通过包的
__main__.py简化调用
如果希望更简洁的调用(比如直接用etl而非etl.etl),可以在你的etl包根目录下创建__main__.py文件,内容如下:# etl/__main__.py from .etl import Etl if __name__ == "__main__": Etl().run()之后就可以用以下命令提交:
spark-submit -m etl直接通过代码片段执行类逻辑
对于简单测试场景,也可以直接在命令行中传入执行代码:spark-submit -c "from etl.etl import Etl; Etl().run()"这种方式适合快速验证,不推荐用于复杂的ETL任务。
内容的提问来源于stack exchange,提问作者kellanburket
相关产品推荐
相关产品推荐

