Пожалуйста, давайте примем это как подробный комментарий.Почему бы сначала не разделить файлы в 500 МБ CSV, а затем преобразовать в паркет с помощью dask?
import pandas as pd
import numpy as np
import os
fldr = "data/splitted"
fldr_out = "data/splitted_parquet"
os.makedirs(fldr)
os.makedirs(fldr_out)
# this for a ~4gb csv
rows = int(1e7)
cols = 20
df = pd.DataFrame(np.random.rand(rows, cols),
columns=["col_{}".format(i) for i in range(cols)])
df.to_csv("data/file.csv")
В Linux вы можете разбить его на файлы по 500 М с помощью
split -b 500M --additional-suffix=".csv" file.csv splitted/file_part_
ТеперьВы можете преобразовать в паркет с DASK
from dask import compute()
from dask import delayed
@delayed
def csv2parq(fn):
out = fn.replace(fldr, fldr_out)
pd.read_csv(fn).to_parquet(out)
fns = os.listdir(fldr)
fns = [os.path.join(fldr, fn) for fn in fns]
compute([csv2parq(fn) for fn in fns])