使用 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()
似乎不一致 - 我不建议使用它。
我有一个计算量很大的 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()
似乎不一致 - 我不建议使用它。