【发布时间】:2021-01-03 20:39:38
【问题描述】:
我有两个 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
如果我的方法有误,请纠正我。
【问题讨论】:
-
试试这个:
final_combined = pa.concat_tables([header,data])。连接Table应该简单高效,只要它们具有相同的架构。
标签: python shell csv pyarrow apache-arrow