Python 组件之间共享数据帧的正确方式是什么?

Python 组件之间共享数据帧的正确方式是什么?,python,dataframe,amazon-s3,kubeflow,kubeflow-pipelines,Python,Dataframe,Amazon S3,Kubeflow,Kubeflow Pipelines,我正在处理Kubeflow的一个遗留项目,管道有一些组件,以便对数据帧应用某种过滤器 为了做到这一点,每个组件从S3下载数据帧并应用过滤器,然后再次将其上传到S3 在数据帧用于训练或验证模型的组件中,从S3下载数据帧 问题在于这是一种最佳实践,还是最好在组件之间直接共享数据帧,因为上传到S3可能会失败,然后管道会失败 谢谢对于询问“最佳”或“推荐”方法的问题,基本答案是:“视情况而定” 然而,在您的案例中有一些值得详细说明的考虑因素 在管道步骤之间保存到S3。 这将存储管道的中间结果,并且只要这

我正在处理Kubeflow的一个遗留项目,管道有一些组件,以便对数据帧应用某种过滤器

为了做到这一点,每个组件从S3下载数据帧并应用过滤器,然后再次将其上传到S3

在数据帧用于训练或验证模型的组件中,从S3下载数据帧

问题在于这是一种最佳实践,还是最好在组件之间直接共享数据帧,因为上传到S3可能会失败,然后管道会失败


谢谢

对于询问“最佳”或“推荐”方法的问题,基本答案是:“视情况而定”

然而,在您的案例中有一些值得详细说明的考虑因素

  • 在管道步骤之间保存到S3。 这将存储管道的中间结果,并且只要这些步骤需要很长时间并且可以重新启动,那么这样做可能是值得的。“长时间”的含义取决于您的用例

  • 将数据直接从一个组件传递到另一个组件。这样可以节省存储吞吐量,并且很可能节省存储数据到S3或从S3检索数据的时间。缺点是:如果你中途失败,你必须从头开始

  • 因此,问题是:

    • 这些步骤(可重启)吗
    • 管道故障的频率是多少
    • 从某个中点重新开始处理是否容易
    • 您是否更关心处理时间而不是失去一些工作的风险
    • 您是否关心S3存储/传输的成本

    与通常询问“最佳”或“推荐”方法的问题一样,主要答案是:“视情况而定”

    然而,在您的案例中有一些值得详细说明的考虑因素

  • 在管道步骤之间保存到S3。 这将存储管道的中间结果,并且只要这些步骤需要很长时间并且可以重新启动,那么这样做可能是值得的。“长时间”的含义取决于您的用例

  • 将数据直接从一个组件传递到另一个组件。这样可以节省存储吞吐量,并且很可能节省存储数据到S3或从S3检索数据的时间。缺点是:如果你中途失败,你必须从头开始

  • 因此,问题是:

    • 这些步骤(可重启)吗
    • 管道故障的频率是多少
    • 从某个中点重新开始处理是否容易
    • 您是否更关心处理时间而不是失去一些工作的风险
    • 您是否关心S3存储/传输的成本
    问题是这是否是最佳实践

    最佳实践是使用基于文件的I/O和内置数据传递功能。当前实现将输出数据上传到上游组件中的存储器,并下载下游组件中的数据。这是最安全、最便携的选项,应该一直使用,直到您发现它不再适合您(100GB数据集可能无法可靠工作)

    或者最好在组件之间直接共享数据帧

    如何在不同机器上容器中运行的不同python程序之间“直接共享”内存中的python对象

    因为上传到S3可能会失败,然后管道也会失败

    发生故障的管道可以重新启动。缓存功能将确保已完成的任务不会重新执行

    不管怎样,还有什么选择?如何在分布式容器化程序之间发送数据而不通过网络发送

    问题是这是否是最佳实践

    最佳实践是使用基于文件的I/O和内置数据传递功能。当前实现将输出数据上传到上游组件中的存储器,并下载下游组件中的数据。这是最安全、最便携的选项,应该一直使用,直到您发现它不再适合您(100GB数据集可能无法可靠工作)

    或者最好在组件之间直接共享数据帧

    如何在不同机器上容器中运行的不同python程序之间“直接共享”内存中的python对象

    因为上传到S3可能会失败,然后管道也会失败

    发生故障的管道可以重新启动。缓存功能将确保已完成的任务不会重新执行


    不管怎样,还有什么选择?如何在不通过网络发送的情况下在分布式容器化程序之间发送数据?

    但我可以理解,您希望存储数据帧,以避免从scatch启动管道,但无论如何,这不是通过组件并仅存储在每个组件末尾的最佳选择?对不起,我不明白这个问题。你能换个说法吗?>“缺点是:如果你中途失败了,你必须从头开始。”-我不确定是这样。缓存功能确保管道可以再次启动,并且只执行未完成的步骤。事实上,选项2更安全,因为它不使用可能损坏和破坏一切的可变外部状态。@Ark kun:你是说?事实上,它似乎提供了步骤缓存,您可能是对的。是的,我指的是Kubeflow管道的执行缓存。但我可以理解,您希望存储数据帧,以便不从scatch启动管道,但无论如何,这不是传递组件的最佳选项,而只存储在每个组件的末尾?对不起,我不明白这个问题。你能换个说法吗?>“缺点是:如果你中途失败