Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Minio读入Dask会引发将二进制字符串JSON读入/转换为utf8的问题_Dask_Minio - Fatal编程技术网

从Minio读入Dask会引发将二进制字符串JSON读入/转换为utf8的问题

从Minio读入Dask会引发将二进制字符串JSON读入/转换为utf8的问题,dask,minio,Dask,Minio,我正在尝试从Minio将JSON-LD读入Dask。管道工作,但字符串作为二进制字符串来自Minio 所以 将oss.open('gleaner/called/repo/file.jsonld','rb')作为f: 打印(f.read()) 导致 b'\n{\n "@context": "http://schema.org/",\n "@type": "Dataset",\n ... 我可以简单地用

我正在尝试从Minio将JSON-LD读入Dask。管道工作,但字符串作为二进制字符串来自Minio

所以

将oss.open('gleaner/called/repo/file.jsonld','rb')作为f:
打印(f.read())
导致

b'\n{\n    "@context": "http://schema.org/",\n    "@type": "Dataset",\n  ...
我可以简单地用

将oss.open('gleaner/called/repo/file.jsonld','rb')作为f:
打印(f.读取().解码(“utf-8”))
现在一切都如我所料

然而,我和达斯克一起工作,当我读到书包时

dgraphs=db.read_text('s3://bucket/prefa/prefb/*.jsonld',
存储选项={
“关键”:关键,
“秘密”:秘密,
“client_kwargs”:{“endpoint_url”:”https://example.org"}
}).map(json.loads)
我无法将Minio中的内容变成字符串与二进制字符串。我需要在它们到达我怀疑的json.loads映射之前进行转换

我想我也可以在这里注入“解码”,但我无法解决如何注入


谢谢

顾名思义,
read_text
以文本模式打开远程文件,相当于
open(…,'rt')
read\u text
的函数包含各种解码参数,例如UTF8作为默认编码。您不需要执行任何其他操作,但如果遇到问题,请发布一个特定错误,最好是示例文件内容

如果您的数据不是由行分隔的,则read_文本可能不适合您,您可以执行以下操作

@dask.delayed()
def read_a_file(fn):
    # or preferably open in text mode and json.load from the file
    with oss.open('gleaner/summoned/repo/file.jsonld', 'rb') as f:
        return json.loads(f.read().decode("utf-8"))

output = [read_a_file(f) for f in filenames]

然后,您可以根据需要在此基础上创建一个包或数据框。

也感谢您在后续问题上提供的帮助。我会试试看是否能提供更多细节,但这有点困难,因为我所有的迷你水桶都需要密钥和秘密。若读文本可以接受UTF解码参数,我只需要解决如何将其放入。示例文件在我看到的一个问题上。。JSON文件需要是一行吗?如果是这样,那么这可能就是问题所在。我尝试了
dgraphs=db.read_text('s3://gleaner/called/opentopo/*.jsonld',storage_options={“key”:key,“secret”:secret,“client_kwargs:{“endpoint_url”:”https://oss.geodex.org“}}).str.replace('\n','').map(json.loads)
str.replace以查看是否可以删除新行,但它似乎不起作用。我安装了一个我正在使用的ipynb,它可以读取测试minio服务器上的公共存储桶。我想知道这是否与JSON-LD文档中的新行有关?是的,read_text将文件视为一系列行。如果JSON跨行,则需要一个带有dask.delayed的自定义函数;我来举个例子,再次感谢。。我在您的指导下完成了所有工作,并回到了我的JSON-LD工作流程中,在那里我会感觉舒服得多。非常有兴趣了解如何利用Dask处理大量JSON-LD文档。当心!