Объединение файлов TSV для создания новой таблицы TSV для Apache Arrow

#python #shell #csv #pyarrow #apache-arrow

#python #оболочка #csv #pyarrow #apache-arrow

Вопрос:

У меня есть два файла TSV (header.tsv amp; data.tsv). заголовок.tsv содержит более 1000 имен столбцов, а data.tsv содержит ~ 50 Тыс. записей (с нулевыми значениями столбцов тоже). Я хотел бы создать новый файл TSV (скажем, combined.tsv), добавив файл data.tsv в header.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
  

Я использовал команды оболочки, такие как

 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()
  

Я даже пытался использовать метод concat_tables из pyarrow, выполнив следующие действия

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

Ошибка

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

Пожалуйста, поправьте меня, если мой подход неверен.

Комментарии:

1. Попробуйте это: final_combined = pa.concat_tables([header,data]) . Объединение Table должно быть простым и эффективным при условии, что они имеют одинаковую схему.

Ответ №1:

Чтобы создать объединенный CSV, вы хотите объединить заголовок и данные:

 cat header.csv data.csv > combined.csv
  

Использование «вставить» выполнит «горизонтальную» конкатенацию — объединение 1-й, 2-й, 3-й, … строк из каждого файла, образуя длинные строки.