我有以下任务
class Test(luigi.Task):
foo = luigi.DictParameter(default = {})
...我正在使用一个配置文件来运行这个
[Test]
foo = "{'a': 0, 'b': 1}"我也试过
'{'a': 0, 'b': 1}'"{"a": 0, "b": 1}""{'a': "0", 'b': "1"}""{'a': 0, 'b': 1}"他们都失败了
KeyError: '"a"'或
KeyError: ''a''或者是一些相关的键错误。当我使用配置文件时,我应该将字典配置为什么参数呢?
我试过这也是,但即使这样也不起作用。此链接来自修复TOML文件中字典加载的PR。
在DictParameter的官方文档中,他们建议
luigi模块my_tasks MyTask -标签
或
luigi --模块my_tasks MyTask --标记{“角色”:"web","env":“暂存”}‘
但是没有提到TOML文件。即使在它们复杂的示例TOML中,它们也不包含字典。
我不得不说,Luigi是我工作过的最糟糕的项目之一。
发布于 2022-05-05 10:17:36
在开发我们的一个项目时,我遇到了一个类似的问题。不幸的是,我们没有找到在luigi.cfg中包含字典的解决方案,而是使用了一个.yaml文件和luigi.WrapperTask。
我们做了以下工作:
class BaseTask(luigi.WrapperTask):
with open('/path/to/your/config.yaml') as f:
foo_dict = yaml.safe_load(f)
def requires(self):
yield Test(foo=foo_dict)
class Test(luigi.Task):
foo = luigi.DictParameter(default = {})希望能帮上忙。
发布于 2022-06-22 23:55:27
这就是对我有用的东西。
在您的配置文件中,执行以下操作:
blah = "{'a':'b'}"在你的主文件中,你会
dict_param = luigi.DictParameter()
def run(self):
parsed_dict_param = dict(eval(self.dict_param))所以魔法来自于。
https://stackoverflow.com/questions/72116390
复制相似问题