Luigi LocalTarget 二进制文件
Posted
技术标签:
【中文标题】Luigi LocalTarget 二进制文件【英文标题】:Luigi LocalTarget binary file 【发布时间】:2017-01-03 21:52:07 【问题描述】:我在项目的 Luigi 管道中编写二进制 LocalTarget
时遇到了麻烦。我在这里隔离了问题:
class LuigiTest(luigi.Task):
def output(self):
return luigi.LocalTarget('test.npz')
def run(self):
with self.output().open('wb') as fout:
np.savez_compressed(fout, array=np.asarray([1, 2, 3]))
我尝试以'w'
和'wb'
的身份打开,但我不断收到以下错误:
TypeError: write() argument must be str, not bytes
我使用的是 python 3.5.1,我的 luigi 版本是 2.1.1
【问题讨论】:
【参考方案1】:问题在于LocalTarget
的格式。将其更改为:
return luigi.LocalTarget('test.npz', format=luigi.format.Nop)
解决了这个问题。但是,文档中对此一无所知。
【讨论】:
同样的问题,非常有用!【参考方案2】:它解决了我在 Hadoop 中编写 parquet 文件的问题。 format=luigi.format.Nop
成功了。谢谢!
import luigi
import pandas as pd
import luigi.contrib.hdfs as hdfs
class Hdfs(luigi.Task):
"""
Writes files into output.
"""
def __init__(self, *args, **kwargs):
super(Hdfs, self).__init__( *args, **kwargs)
def output(self):
fname_template = f'/data/some_directory/test_luigi.parq'
return luigi.contrib.hdfs.HdfsTarget(fname_template, format=luigi.format.Nop)
def run(self):
with self.output().open('w') as f:
print(f.path)
d = pd.DataFrame('sim_id':[1,2,3])
d.to_parquet(f)
【讨论】:
以上是关于Luigi LocalTarget 二进制文件的主要内容,如果未能解决你的问题,请参考以下文章