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

9

如果在PySpark的UDF函数中添加任何类型的日志记录,它都不会出现在任何地方。这是一种制造这种情况的方法吗?

到目前为止,我已经尝试了标准的Python日志记录、py4j和print等方式。

我们正在AWS EMR集群上使用YARN管理器运行PySpark 2.3.2。

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

def parse_data(attr):
    try:
        # execute something
    except Exception as e:
        logger.error(e)
        return None

我将其转换为UDF:

import pyspark.sql.functions as F
parse_data_udf = F.udf(parse_data, StringType())

我会在一个数据框上使用它:

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

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


可能是https://dev59.com/1F8e5IYBdhLWcg3wwMhW的重复问题。 - Aasim Khan
请看这里:https://dev59.com/31kR5IYBdhLWcg3w0QNL - Mariusz
2
这两个都是关于一般日志记录的,我的问题是关于UDF内部的日志。 - Géza Hodgyai
1
@Mariusz - 抱歉,我们尝试过了,但它没有起作用。 - Aleksandr Panzin
你好,你有想到任何解决方案吗?我也卡在同一个点上了。 - Nrithya M
我正在检查类似的问题.. UDF中打印语句的输出在stderr中。 - Karan Alang
1个回答

0
使用yarn时,您可以使用以下YARN CLI命令来检查容器日志。
这就是stdout/stderr(因此您在udf内记录的内容)可能位于的位置。
yarn logs -applicationId <Application ID> -containerId <Container ID>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接