【问题标题】:Pyarrow keeps converting string to binary using PandasPyarrow 不断使用 Pandas 将字符串转换为二进制
【发布时间】:2018-09-05 08:43:00
【问题描述】:

我正在尝试使用 python2.7 中的 pandas 和 pyarrow 将 csv 文件转换为镶木地板。

我在将字符串从 pa.Table.from_pandas(df) 转换转换为字符串时遇到问题。它不断将数据类型转换为“二进制”,这让 AWS Glue 非常不高兴。

我尝试了自定义架构,但它不起作用。

fields = []
for name, type in dtypes.items():
        fields.append(pa.field(name, type))
my_schema = pa.schema(fields)
df = pd.read_csv(StringIO(file), delimiter="\t")
table = pa.Table.from_pandas(df)

以前在读取 csv 时指定数据类型,这也不起作用。还尝试了 replace_schema_metadata() 但这并没有多大作用,因为它不是实际的架构。

【问题讨论】:

    标签: python python-2.7 apache pandas parquet


    【解决方案1】:

    Python 2 的str 类型实际上与 Parquet 定义的 BINARY 内容相同,因此所有带有str 对象的列都将保存为binary。在 Python 3 中,它们应该被正确加载为bytes。要将列存储为字符串/UTF-8 在 Parquet 中,您需要将列转换为 unicode 对象。

    【讨论】:

    • 谢谢!那是我没有尝试过的一件事,因此在读取数据帧时添加 encoding='utf8' 有助于架构将字符串转换为字符串!
    【解决方案2】:

    你也可以这样做:

    df = df.astype(unicode)

    【讨论】:

      【解决方案3】:

      @Maddy Schiappa,还请注意,由于您提到了 AWS Glue,因此目前仅支持纯 Python 库。 "

      您可以在 AWS Glue 中使用 Python 扩展模块和库 ETL 脚本,只要它们是用纯 Python 编写的。 C 库 例如 pandas 目前不支持,也不支持 用其他语言编写的扩展。

      【讨论】:

      • 这与问题无关,因为代码是在 Glue 之外执行的。 pyarrow 在 Glue 环境之外创建文件,然后由 Glue 摄取,但使用不同的库(可能是 parquet-mr)。
      猜你喜欢
      • 2021-02-24
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      相关资源
      最近更新 更多