我有大量数据(图像)使用机器学习模型(CNN)来处理图像并给出结果。作为 spark 作业性能的一部分,我正在尝试查看内部 spark (YARN) 作业流程。 Spark UI 显示作业列表、阶段 - DAG、执行程序和工作节点详细信息,但我试图在控制台中查找/打印 RDD 的内容。 是否有可能找到图像在每个节点中的分块方式?
我试过 df.rdd.glom().collect() 并没有打印任何东西,df.collect() 给出了图像值的数组格式的数组,但它是合并的。
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)