如何在不引起写入的情况下评估累加器



我想在编写数据帧之前执行轻量级验证。我必须通过";foo";在写它之前;foo":

acc = sc.accumulator(0)
output = df.map(foo)
if acc.value < THRESHOLD:
raise ValueError(f"Failed validation: {acc.value} < {THRESHOLD}")
output.write(path)

问题是acc.value == 0,因为累加器显然要到output.write()才能求值,我想避免这种情况,因为数据未通过验证。什么是正确的设计模式?

如果您的目标是在将数据发布到某个输出路径之前验证计数,只需将数据写入中间路径即可。然后计算累加器计数器,如果计数有效,则重命名到实际输出目的地的中间路径。

acc = sc.accumulator(0)
output = df.map(foo)
output.write(tmp_path)
if acc.value < THRESHOLD:
# fs.delete(tmp_path)
raise ValueError(f"Failed validation: {acc.value} < {THRESHOLD}")
else fs.rename(tmp_path, path)

最新更新