从 Minio 读取 Dask 会引发将二进制字符串 JSON 读取/转换为 utf8 的问题
Read into Dask from Minio raises issue with reading / converting binary string JSON into utf8
我正在尝试将 JSON-LD 从 Minio 读入 Dask。管道工作但字符串来自 Minio 作为二进制字符串
所以
with oss.open('gleaner/summoned/repo/file.jsonld', 'rb') as f:
print(f.read())
结果
b'\n{\n "@context": "http://schema.org/",\n "@type": "Dataset",\n ...
我可以简单地将其转换为
with oss.open('gleaner/summoned/repo/file.jsonld', 'rb') as f:
print(f.read().decode("utf-8"))
现在一切都如我所料。
但是,我正在使用 Dask 并在使用
读取包时
dgraphs = db.read_text('s3://bucket/prefa/prefb/*.jsonld',
storage_options={
"key": key,
"secret": secret,
"client_kwargs": {"endpoint_url":"https://example.org"}
}).map(json.loads)
我无法让来自 Minio 的内容变成字符串与二进制字符串。我需要在它们到达我怀疑的 json.loads 地图之前转换它们。
我想我也可以在这里以某种方式注入“解码”,但我无法解决如何。
谢谢
顾名思义,read_text
以文本方式打开远程文件,相当于open(..., 'rt')
。 read_text
的 signature 包括各种解码参数,例如 UTF8 作为默认编码。您不需要执行任何其他操作,但如果您遇到问题,请post具体错误,最好是示例文件内容。
如果您的数据不是由行分隔的,read_text 可能不适合您,您可以这样做
@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]
然后您可以根据需要从中创建包或数据框。
我正在尝试将 JSON-LD 从 Minio 读入 Dask。管道工作但字符串来自 Minio 作为二进制字符串
所以
with oss.open('gleaner/summoned/repo/file.jsonld', 'rb') as f:
print(f.read())
结果
b'\n{\n "@context": "http://schema.org/",\n "@type": "Dataset",\n ...
我可以简单地将其转换为
with oss.open('gleaner/summoned/repo/file.jsonld', 'rb') as f:
print(f.read().decode("utf-8"))
现在一切都如我所料。
但是,我正在使用 Dask 并在使用
读取包时dgraphs = db.read_text('s3://bucket/prefa/prefb/*.jsonld',
storage_options={
"key": key,
"secret": secret,
"client_kwargs": {"endpoint_url":"https://example.org"}
}).map(json.loads)
我无法让来自 Minio 的内容变成字符串与二进制字符串。我需要在它们到达我怀疑的 json.loads 地图之前转换它们。
我想我也可以在这里以某种方式注入“解码”,但我无法解决如何。
谢谢
顾名思义,read_text
以文本方式打开远程文件,相当于open(..., 'rt')
。 read_text
的 signature 包括各种解码参数,例如 UTF8 作为默认编码。您不需要执行任何其他操作,但如果您遇到问题,请post具体错误,最好是示例文件内容。
如果您的数据不是由行分隔的,read_text 可能不适合您,您可以这样做
@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]
然后您可以根据需要从中创建包或数据框。