У меня есть ~ 70 ГБ выходной MD моделирования. Шаблон объяснения с фиксированным числом строк и данных с фиксированным количеством строк регулярно повторяется в файле. Как я могу прочитать файл в блоке Dask Dataframe по фрагменту, в котором строки объяснения игнорируются?
Я успешно написал лямбда-функцию в аргументе skiprows в pandas.read_csv, чтобы игнорировать строки объяснения и только читатьлинии данных. Я преобразовал введенный пандами код в dask один, но он не работает. Здесь вы можете увидеть код dask, написанный путем замены pandas.read_csv на dd.read_csv:
# First extracting number of atoms and hence, number of data lines:
with open(filename[0],mode='r') as file: # The same as Chanil's code
line = file.readline()
line = file.readline()
line = file.readline()
line = file.readline() # natoms
natoms = int(line)
skiplines = 9 # Number of explanation lines repeating after nnatoms lines of data
def logic_for_chunk(index):
"""This function read a chunk """
if index % (natoms+skiplines) > 8:
return False
return True
df_chunk = dd.read_csv('trajectory.txt',sep=' ',header=None,index_col=False,skiprows=lambda x: logic_for_chunk(x),chunksize=natoms)
Здесь индексы информационного кадра - это номера строк файла. Используя приведенный выше код, в первом фрагменте строки от 0 до 8 в файле игнорируются, затем строки от 9 до 58 читаются. На следующем фрагменте строки с 59 по 67 игнорируются, а затем считываются фрагменты размером в натуральную величину из строк с 68 по 117. Это происходит до тех пор, пока все снимки данных не будут прочитаны. К сожалению, хотя приведенный выше код хорошо работает в пандах, он не работает в dask. Как я могу реализовать аналогичную процедуру в dask dataframe?