使用 PySpark UDF 时记录工作人员 ID

Log worker ID when using PySpark UDF

我有一个计算量很大的 Python 函数,它包装到 PySpark UDF 中,运行 包含大约 100 行数据。在查看 CPU 利用率时,看起来有些工作节点甚至没有被利用。我意识到这可能有多种原因,并且正在尝试对此进行调试。

在 UDF 内部,我已经记录了各种统计信息(例如,每个 UDF 执行的开始和结束时间)。还有什么方法可以记录工作节点 ID 吗?我的目的是确保作业在所有工作节点之间均匀分布。

我想工作人员的 IP 或我可以在 UDF 中登录的任何其他独特功能也可以。

以下作品:

import socket

def my_udf_func(params):
    # your code here
    host = socket.gethostname()

然后您可以 return host 在 return 参数内(例如在字典中)或将其写入您的日志。 databricks提供的主机名是集群名+worker节点ip地址,例子:

0927-152944-dorky406-10-20-136-4

10-20-136-4 在这种情况下是 IP 地址。

socket.getsockname() 似乎不一致 - 我不建议使用它。