开发者社区> 问答> 正文

在显示、计数和保存数据帧之间重新计算非确定性字段

计数和保存数据帧之间重新计算非确定性字段
我们有一个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列的稳定性?

展开
收起
社区小助手 2018-12-19 15:50:45 1590 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    只需通过调用以下命令将您的udf定义为非确定性:

    val idUdf = udf(() => idgen.incrementAndGet.toString + "_" + UUID.randomUUID)

    .asNondeterministic()

    这将仅评估您的udf一次,并将结果保存在RDD中

    2019-07-17 23:22:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载