如何找到在spark中的哪个工作节点上处理的输入图像/数据?

toe95027  于 2023-05-01  发布在  Apache
关注(0)|答案(1)|浏览(83)

我有大量的数据(图像),使用机器学习模型(CNN)来处理图像并给出结果。作为spark工作表现的一部分,我试图看到内部spark(YARN)工作流。Spark UI显示了Job,Stages - DAG,Executors和worker节点的详细信息,但我试图在控制台中查找/打印RDD的内容。有没有可能找到每个节点中的图像是如何分块的?
我试过df. rdd。glom().collect()并没有打印任何东西,df。collect()给出了数组的数组格式的图像值,但它是统一的。谢谢你的帮助

webghufk

webghufk1#

Spark将数据加载到分区中,每个分区都在一个工作节点中。Spark提供了一个名为foreachPartition的分区迭代函数,你可以用它来打印每个分区的内容和与之关联的工作节点,下面是一个伪代码:

from pyspark.sql.functions import col
from pyspark import TaskContext

def print_partition_data(data):
    node_name = TaskContext.get().getHost()
    partition_id = TaskContext.getPartitionId()
    print(f"Partition number {partition_id} is on node {node_name}:")
    for d in data:
        print(d)

# Then call the function like this
df.foreachPartition(print_partition_data)

相关问题