如何检测您的代码是否在 pyspark 下运行

Ter*_*non 5 pyspark

对于登台和生产,我的代码将在 PySpark 上运行。但是,在我的本地开发环境中,我不会在 PySpark 上运行我的代码。

从日志记录的角度来看,这提出了一个问题。由于在使用 PySpark 时通过 Py4J 使用 Java 库 Log4J,因此不会使用 Log4J 进行本地开发。

值得庆幸的是,Log4J 的 API 和核心 Python 日志记录模块是相同的:一旦获得记录器对象,您只需使用任一模块debug()即可info()

因此,我希望检测我的代码是否在 PySpark 或非 PySpark 环境中导入/运行:类似于:

class App:

    def our_logger(self):
        if self.running_under_spark():
            sc = SparkContext(conf=conf) 
            log4jLogger = sc._jvm.org.apache.log4j 
            log = log4jLogger.LogManager.getLogger(__name__) 
            log.warn("Hello World!")
            return log
        else:
            from loguru import logger
            return logger
Run Code Online (Sandbox Code Playgroud)

我该如何实施running_under_spark()

简单地尝试导入pyspark并查看它是否有效并不是一种万无一失的方法,因为我pyspark在我的开发环境中从我的 IDE 中删除了有关代码中未导入模块的警告。

Pte*_*tyl 1

也许您可以在运行时检查的 Spark 环境中设置一些环境变量(在 $SPARK_HOME/conf/spark-env.sh 中):

export SPARKY=spark
Run Code Online (Sandbox Code Playgroud)

然后检查 SPARKY 是否存在,以确定您是否处于 Spark 环境中。

from os import environ

class App:
def our_logger(self):
    if environ.get('SPARKY') is not None:
        sc = SparkContext(conf=conf) 
        log4jLogger = sc._jvm.org.apache.log4j 
        log = log4jLogger.LogManager.getLogger(__name__) 
        log.warn("Hello World!")
        return log
    else:
        from loguru import logger
        return logger
Run Code Online (Sandbox Code Playgroud)