使用编码 UTF8 将列转换为字节时出错

问题描述 投票:0回答:1

将 dask 数据帧写入 S3 时出现以下错误。不明白为什么。有谁知道怎么解决吗

dd.from_pandas(pred, npartitions=npart).to_parquet(out_path)

错误是

错误.. 使用 UTF8 编码将列“team_nm”转换为字节时出错。原始错误:内置操作 Traceback 的参数类型错误(最近一次调用): 文件“/usr/local/lib/python3.7/site-packages/fastparquet/writer.py”,第 175 行,在转换中 输出 = array_encode_utf8(数据) 文件“fastparquet/speedups.pyx”,第 60 行,位于 fastparquet.speedups.array_encode_utf8 中 TypeError:内置操作的参数类型错误

在处理上述异常的过程中,又发生了一个异常:

在写入镶木地板之前,我尝试将“team_nm”编码为“latin-1”,但不起作用。

pred['team_nm'] = pred['team_nm'].str.encode("Latin-1")

尝试将 fastparquet 从 0.4.1 升级到 0.7.1,但也不起作用

python dask fastparquet
1个回答
0
投票

Parquet 假定 UTF8 编码,并且不可能有其他编码,因此如果您的文本是其他内容,它将失败。如果您自己将列编码为字节,您确实可以选择您喜欢的任何编码,只要您加载的位置也准备好手动进行解码即可。

如果您有一列字节(因为您手动编码),那么 fastparquet 通常能够猜测到这一点 除非您的列以一些 NULL/None 值开头。为了帮助完成这一过程,您可以使用参数

object_encoding='bytes'
(所有对象列都被解释为字节)或
object_encoding={'team_nm': 'bytes'}
(如果已知为字节,则为一个特定列)。

© www.soinside.com 2019 - 2024. All rights reserved.