Luigi每天都要运行pandas脚本吗?

时间:2016-05-16 18:56:59

标签: python-3.x pandas luigi

我有一堆python文件,可以对各种数据源进行端到端的文件处理。

例如,survey.py将使用pandas读取文件,添加列,重命名内容,进行一些计算,然后将修改后的文件保存回磁盘。

driver.py将遵循该文件的相同过程,等等。许多文件也会发生同样的结构。

然后我有一个名为process_all的文件,它基本上只按特定顺序运行每个python文件(某些文件依赖于其他文件)。经过进一步的研究,我偶然发现了一个名为luigi的库,如果我需要扩展,它似乎能够更加强大地完成同样的任务。

问题:我是否继续编写单独的.py文件来处理数据,还是将所有这些内容放在我的luigi类中?我假设我将要处理的每个原始文件有一个类,对吗?

或者我是否写出了luigi类中的所有处理步骤,比如下面的CleanDriver类?这似乎会变得超级冗长,因为很多这些单独的代码文件每个都是20-50行,并且有几十个。

class CleanSurvey(luigi.Task):
    date_interval = luigi.DateIntervalParameter()

    def run(self):
        os.system('../py_files/run_ftp.py')

    def output(self):
        return luigi.LocalTarget(path + 'test_survey.csv')

class CleanDriver(luigi.Task):
    date_interval = luigi.DateIntervalParameter()

    def run(self):
        df = pd.read_csv('../file.csv')
        df['col5'] = do stuff
        df.rename(columns={:}, inplace=True)

    def output(self):
        return luigi.LocalTarget(path + 'test_driver.csv')

if __name__ == '__main__':
    luigi.run

1 个答案:

答案 0 :(得分:1)

我会建议你在开始之前先学习object orientation in Python。与Luigi合作会很有帮助。

Luigi确实帮助创建了数据处理管道。管道由任务组成。 (这一步大致是一个阶段)。

关于如何将这些步骤包装到类中的问题。因人而异。我希望我的Luigi课程遵循单一责任原则。这就是每个任务都做一件事,但是对。将来调试也更容易并进行更改。

最后在您提到的示例中,您的课程没有requires()。此函数很重要,因为它允许您将一个任务的输出提供给另一个任务,从而创建适当的依赖关系树。