如何解决如何从同一数据集读取/写入同一数据集,例如实现缓存机制
我有一个普遍的问题:一个人如何读写同一数据集,例如实现类似缓存机制的功能。天真的,这会在依赖图中创建一个循环,因此不允许这样做吗?
我想做的事情是这样的:
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 举报,一经查实,本站将立刻删除。