问题描述
我有两个TSV文件(header.tsv和data.tsv)header.tsv拥有1000多个列名,data.tsv拥有约5万条记录(列值也为NULL)。我想通过将data.tsv文件附加到header.tsv来创建一个新的TSV文件(例如,combined.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
如果我的方法有误,请纠正我。
解决方法
要创建合并的CSV,您想将标题和数据连接起来:
cat header.csv data.csv > combined.csv
使用“粘贴”将执行“水平”串联-合并每个文件的第一,第二,第三,...行,形成长行。