首页 > 解决方案 > 组合 TSV 文件为 Apache Arrow 表创建新的 TSV

问题描述

我有两个 TSV 文件(header.tsv 和 data.tsv),header.tsv 包含 1000 多个列名,data.tsv 包含约 50K 记录(也包含 NULL 列值)。我想通过将 data.tsv 文件附加到 header.tsv 来创建一个新的 TSV 文件(比如说 combine.tsv)。这样做的原因是创建一个最终的 TSV 文件,它可以将列名和数据保存在一起,并尝试查看在创建 Apache Arrow 表时是否可以避免错误。

**header.tsv**
field1 field2 field3 field4 ... field1000 

**data.tsv**
eng-en    1er2p  NULL  ert,yu1  ...  2020-09-16
frnch-fr  2er3p  NULL  ert,yu2  ...  2020-09-16
.
.
.
ltn-lt    50Ker  NULL  ert,yu50K ... 2020-09-16

所需的 TSV

**combined.tsv**
field1    field2   field3   field4    ...   field1000
eng-en    1er2p    NULL     ert,yu1   ...   2020-09-16
frnch-fr  2er3p    NULL     ert,yu2   ...   2020-09-16
.
.
.
ltn-lt    50Ker    NULL     ert,yu50K ...   2020-09-16

我使用了 SHELL 命令,例如

paste header.tsv data.tsv > combined.tsv

然后尝试创建一个 pyarrow 表。

import pyarrow as pa
import pyarrow.csv as csv
combined = csv.read_csv('combined.tsv',parse_options=csv.ParseOptions(delimiter="\t"))

执行上述操作时出现以下错误

ArrowInvalid: CSV parse error: Expected 2010 columns, got 1006

header.tsv 文件正好有 1005 列,可以解析这个 header.tsv 文件以创建 pyarrow 表,但不能创建 data.tsv 文件。

import pyarrow as pa
import pyarrow.csv as csv
header = csv.read_csv('headers.tsv',parse_options=csv.ParseOptions(delimiter="\t")) 
head_show=header.to_pandas()
head_show.head()

我什至尝试通过执行以下操作来使用 pyarrow 中的 concat_tables 方法

import pyarrow as pa
final_combined = pa.concat_tables(header,data)

错误

TypeError: Cannot convert pyarrow.lib.ChunkedArray to pyarrow.lib.Table

如果我的方法有误,请纠正我。

标签: pythonshellcsvpyarrowapache-arrow

解决方案


要创建组合 CSV,您需要连接标题和数据:

cat header.csv data.csv > combined.csv

使用“粘贴”将执行“水平”连接 - 合并每个文件的第 1、2、3、... 行,形成长行。


推荐阅读