gpt4 book ai didi

apache-spark - 给定惰性执行风格,如何在 Spark 中计时转换?

转载 作者:行者123 更新时间:2023-12-05 00:56:23 24 4
gpt4 key购买 nike

我有一些代码正在执行相当多的步骤,我知道整个过程需要多长时间。但是,我希望能够计算出每个单独的转换需要多长时间。以下是一些简单的步骤示例:

rdd1 = sc.textFile("my/filepath/*").map(lambda x: x.split(","))
rdd2 = sc.textFile("other/filepath/*").map(lambda x: x.split(","))
to_kv1 = rdd1.map(lambda x: (x[0], x[1])) # x[0] is key, x[1] is numeric
to_kv2 = rdd2.map(lambda x: (x[0], x[1])) # x[0] is key, x[1] is numeric
reduced1 = to_kv1.reduceByKey(lambda a, b: a+b)
reduced2 = to_kv1.reduceByKey(lambda a, b: a+b)
outer_joined = reduced1.fullOuterJoin(reduced2) # let's just assume there is key overlap
outer_joined.saveAsTextFile("my_output")

现在:我如何对这段代码的特定部分进行基准测试?我知道端到端运行它需要一定的时间( saveAsTextFile 将强制它执行),但我如何仅对 reduceByKey 进行基准测试或 fullOuterJoin代码的一部分?我知道我可以运行 count()在每个操作之后强制执行,但这不会正确地对操作进行基准测试,因为它增加了执行 count 所需的时间以及执行转换的时间。

鉴于 Spark 的惰性执行风格,对 Spark 转换进行基准测试的最佳方法是什么?

请注意,我不是在问如何测量时间。我知道 time模块, start = time.time()等。我在问如何根据 Spark 转换的惰性执行风格进行基准测试,在您调用需要将信息返回给驱动程序的操作之前,这些转换不会执行。

最佳答案

最好的办法是使用 Spark UI 来阅读这些信息。问题有两个方面:

  • 计算是分布式的,因此即使您在每个转换中添加了计时机制,也很难判断任务何时真正完成,因为它可以在一台机器上完成,但不能在另一台机器上完成。也就是说,您可以在其中添加日志记录并找到执行的第一个实例,然后找到最终执行。请记住下一点
  • 转换尽可能流水线化。因此,为了提高效率,Spark 将同时运行多个转换,因此您必须明确地测试一个 Action 。
  • 关于apache-spark - 给定惰性执行风格,如何在 Spark 中计时转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269179/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com