python - 组合 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
如果我的方法有误,请纠正我。
解决方案
要创建组合 CSV,您需要连接标题和数据:
cat header.csv data.csv > combined.csv
使用“粘贴”将执行“水平”连接 - 合并每个文件的第 1、2、3、... 行,形成长行。
推荐阅读
- java - isReady() 在关闭状态下返回 true - 为什么?
- javascript - Home(...):渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,不渲染任何内容,返回 null
- python - AWS Lex + Lambda - 无论上下文如何都拦截所有下一个用户响应 - 不定义示例话语?
- java - 如何使用 javafx fxml 在单击设置按钮时打开上下文菜单。动作应该是控制器中的某种方法
- javascript - 以角度下载后打开或保存文件
- javascript - 第二个下拉菜单运行不正常。
- angular - Angular 开发 Docker 容器
- javascript - Javascript中的异步迭代器
- python - docker中的python脚本在卷中创建锁定文件
- opencart - Opencart 结帐页面中未显示税款