如何从 Pyspark 中的 UDF 函数发送日志

Géz*_*yai 5 logging user-defined-functions pyspark

如果您在 PySpark 的 UDF 函数中添加任何类型的登录,它就不会出现在任何地方。是否有某种方法可以实现这一目标?

到目前为止,我尝试了标准的 python 日志记录、py4j 和打印。

我们在 AWS EMR 集群上运行带有 YARN 集群管理器的 PySpark 2.3.2。

例如。这是我想使用的一个函数:

def parse_data(attr):
    try:
        # execute something
    except Exception as e:
        logger.error(e)
        return None
Run Code Online (Sandbox Code Playgroud)

我将其转换为 UDF:

import pyspark.sql.functions as F
parse_data_udf = F.udf(parse_data, StringType())
Run Code Online (Sandbox Code Playgroud)

我将在数据帧上使用它:

from pyspark.sql import types as pst
dataframe = dataframe.withColumn("new_column", parse_data_udf("column").cast(pst.StringType())
Run Code Online (Sandbox Code Playgroud)

该函数的日志不会出现在任何地方。

小智 0

使用yarn时,您可以使用以下YARN CLI命令来检查容器日志。

这就是 stdout/stderr (以及您在 udf 中记录的内容)可能所在的位置。

yarn logs -applicationId <Application ID> -containerId <Container ID>
Run Code Online (Sandbox Code Playgroud)