Kedro 条件管道或替代品

问题描述

我目前正在检查我们管道的不同设计模式选项。 Kedro 框架似乎是一个不错的选择(允许模块化设计模式、可视化方法等)。

管道应该由许多模块创建,这些模块要么将输出写入文件,要么通过管道将其传输到下一个模块(取决于条件)。在第二种情况下(管道到下一个模块) kedro 下降,因为它将整个输出读入内存然后转发到下一步(或者是否有可能使用 unix 类型的管道)?我正在研究大数据,所以这个适合我。 为什么这个工作流程与通常的 unix 管道不同? - unix 管道正在读取特定的缓冲区大小并立即转发它(我猜这会被交换到磁盘而不是保存在内存中?)。如果您能指出另一个允许此类功能的框架,我将不胜感激(我也不介意从头开始实现 DP)。

编辑: 我的节点主要依赖于外部二进制文件,因此,我想实现类 Unix 的管道。

解决方法

Kedro-Accelerator 是一个 Kedro 插件,它为 Kedro 带来了一些 Unix 管道语义。具体来说,application/json 允许在内存中的节点之间传递数据(如 <div className={classnames("menu__iconsRight",{ "active": isRectOpen })}> ),同时在后台将输出写入磁盘/文件。

一旦您使用 TeePlugin,缓冲将委托给底层框架。例如,对于 MemoryDataSet 对象,默认的复制模式是赋值,因此其行为类似于按顺序运行语句而无需任何加载/保存:

MemoryDataSet

有关实施详情(自 Kedro 0.17.0 起),请参阅 https://github.com/quantumblacklabs/kedro/blob/0.17.0/kedro/io/memory_data_set.py#L105-L130

,

Kedro 是一个不错的框架,但它主要适用于构建批处理管道。如果您正在寻找类似“unix 管道”的行为,那么您应该寻找流处理管道框架,例如 Spark Streaming

如果您需要更多选项,请查看许多其他流处理框架的 Awesome Streaming 列表。