微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从同一数据集读取/写入同一数据集,例如实现缓存机制

如何解决如何从同一数据集读取/写入同一数据集,例如实现缓存机制

我有一个普遍的问题:一个人如何读写同一数据集,例如实现类似缓存机制的功能。天真的,这会在依赖图中创建一个循环,因此不允许这样做吗?

我想做的事情是这样的:

if not key in cache.keys():
  value = some_long_running_computation(key)
  cache[key] = value
return cache[key]

或具有PySpark数据帧的等效逻辑。

我考虑过增量转换,但是它们实际上不适合这种情况,因为它们不允许检查缓存中是否存在键,因此,您总是在脆弱的假设下运行代码,因为缓存在此之后“已完成”增量变换。

有什么想法吗?

谢谢 托比亚斯

解决方法

可以访问输出数据集的上一个视图进行转换。像这样使用@dataframe装饰器时,这是在python中完成的:

previous_output = foundry_output.dataframe("previous")

(您也可以提供模式。)

并在Java中是这样的:

foundryOutput.getExistingOutputDataFrame().get()

但是,我鼓励仅在绝对必要时使用它。保持管道完全“可重复” /“无状态”是一个巨大的好处,这样您可以随时进行快照和重新计算,并且仍然可以重复获得相同的结果。

一旦您在管道中引入了“状态性”,诸如在输出数据集中添加列之类的某些事情就会变得更加困难,因为您将不得不编写类似于数据库迁移的内容。

话虽如此,当您真正需要它时可以使用它,并且在理想情况下,将增加的复杂性的影响保持在较小水平。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。