计数和保存数据帧之间重新计算非确定性字段
我们有一个uuid udf:
import java.util.UUID
val idUdf = udf(() => idgen.incrementAndGet.toString + "_" + UUID.randomUUID)
spark.udf.register("idgen", idUdf)
所面临的一个问题是在运行时count,或show或write每个那些的结束与一个不同的值udf的结果。
df.count() // generates a UUID for each row
df.show() // regenerates a UUID for each row
df.write.parquet(path) // .. you get the picture ..
可以采取哪些方法来保留uuid给定行的单个结果?首先想到的是Key-Value使用每列中其他稳定字段的独特组合来调用远程存储。由于每行的查找以及远程的配置和维护,这当然是昂贵的KV Store。是否有其他机制可以实现这些唯一ID列的稳定性?
只需通过调用以下命令将您的udf定义为非确定性:
val idUdf = udf(() => idgen.incrementAndGet.toString + "_" + UUID.randomUUID)
.asNondeterministic()
这将仅评估您的udf一次,并将结果保存在RDD中
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。