我正在尝试将 numpy.ndarray 转换为 base64,然后再将其转换回来。Base64 库是正确的选择吗?下面非常简单的代码甚至无法按预期工作。我缺少什么?
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
print(x)
print(type(x))
encoded = base64.b64encode(x)
decoded = base64.b64decode(encoded)
print(decoded)
print(type(decoded))
Run Code Online (Sandbox Code Playgroud)
有没有办法取回原始变量?
一般问题是:我可以将“任何”对象转换为二进制字符串,然后转换回原始类型吗?
我也许可以使用 pickle 但我需要压缩格式(不在文件中):类似
x_compressed = zipped(pickle.dumps(x))
Run Code Online (Sandbox Code Playgroud) 我会在 Bigtable 中创建我的最佳密钥。我知道关键设计对于查询速度和优化至关重要。我的案例与来自网络机器的时间序列信息有关。这是一张又高又窄的表格,有 3 列:id、info和datetime。
我最常见的查询是获取每天每个 id 的所有信息。
应该如何设计键以获得最佳性能?
id#date?
我在 datalab 中使用 apache 光束/数据流“玩”。我正在尝试从 gcs 读取 csv 文件。当我使用以下方法创建 pcollection 时:
lines = p | 'ReadMyFile' >> beam.io.ReadFromText('gs://' + BUCKET_NAME + '/' + input_file, coder='StrUtf8Coder')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
LookupError: unknown encoding: "THE","NAME","OF","COLUMNS"
Run Code Online (Sandbox Code Playgroud)
似乎列的名称被解释为编码?
我不明白出了什么问题。如果我不指定“编码器”,我会得到
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe0 in position 1045: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
在 apache 光束之外,我可以通过从 gcs 读取文件来处理此错误:
blob = storage.Blob(gs_path, bucket)
data = blob.download_as_string()
data.decode('utf-8', 'ignore')
Run Code Online (Sandbox Code Playgroud)
我读到 apache beam 只支持 utf8 并且文件不只包含 utf8。
我应该下载然后转换为 pcollection 吗?
有什么建议吗?