首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python luigi localTarget泡菜

python luigi localTarget泡菜
EN

Stack Overflow用户
提问于 2017-06-07 23:46:33
回答 0查看 1.9K关注 0票数 6

我运行的是Windows7,Python 2.7 via Anaconda 4.3.17,Luigi 2.4.0,Pandas 0.18,sklearn版本0.18。根据下面的说明,我试图让一个luigi.LocalTarget输出成为一个pickle来存储几个不同的对象(使用firstJob),然后在一个相关作业(secondJob)中从该pickle中读取。如果我从命令行运行以下命令,firstJob将成功完成:

"python -m luigi -- luigiPickle firstJob --date 2017-06-07 --本地调度程序“

但是,如果我尝试运行secondJob,即,

"python -m luigi -- luigiPickle secondJob --date 2017-06-07 --本地调度程序“

我得到了

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Anaconda2\lib\site-packages\luigi-2.4.0-py2.7.egg\luigi\worker.py", l
ine 191, in run
    new_deps = self._run_get_new_deps()
  File "C:\Anaconda2\lib\site-packages\luigi-2.4.0-py2.7.egg\luigi\worker.py", l
ine 129, in _run_get_new_deps
    task_gen = self.task.run()
  File "luigiPickle.py", line 41, in run
    ret2 = pickle.load(inFile)
  File "C:\Anaconda2\lib\pickle.py", line 1384, in load
    return Unpickler(file).load()
  File "C:\Anaconda2\lib\pickle.py", line 864, in load
    dispatch[key](self)
  File "C:\Anaconda2\lib\pickle.py", line 1096, in load_global
    klass = self.find_class(module, name)
  File "C:\Anaconda2\lib\pickle.py", line 1130, in find_class
    __import__(module)
ImportError: No module named frame

由于无法识别pandas.DataFrame()对象(可能是作用域问题?),luigi在读取pickle时似乎遇到了问题。

代码语言:javascript
复制
import luigi
import pandas as pd
import pickle
from sklearn.linear_model import LinearRegression

class firstJob(luigi.Task):
    date = luigi.DateParameter()

    def requires(self):
        return None

    def output(self):
        return luigi.LocalTarget('%s_first.pickle' % self.date)

    def run(self):
        ret = {}
        ret['a'] = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
        ret['b'] = pd.DataFrame({'a': [3, 4], 'd': [0, 0]})
        ret['c'] = LinearRegression()
        outFile = self.output().open('wb')
        pickle.dump(ret, outFile, protocol=pickle.HIGHEST_PROTOCOL)
        outFile.close()

class secondJob(luigi.Task):
    date = luigi.DateParameter()

    def requires(self):
        return firstJob(self.date)

    def output(self):
        return luigi.LocalTarget('%s_second.pickle' % self.date)

    def run(self):
        inFile = self.input().open('rb')
        ret2 = pickle.load(inFile)
        inFile.close()

if __name__ == '__main__':
    luigi.run()
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44417327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档