Как я могу быстро прочитать большой файл CSV в Python? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь загрузить массив данных размером ~ 67 ГБ (6 000 000 функций на 2300 строк) в компьютер для машинного обучения.Я использую 96-ядерную машину в AWS, которую я хочу использовать для реального бита машинного обучения.Однако Dask загружает файлы CSV в один поток.Это заняло целых 24 часа и не загрузилось.

#I tried to display a progress bar, but it is not implemented on dask's load_csv
from dask.diagnostics import ProgressBar
pbar = ProgressBar()
pbar.register()

df = dd.read_csv('../Larger_than_the_average_CSV.csv')

Есть ли более быстрый способ загрузить это в Dask и сделать его постоянным?Должен ли я перейти на другую технологию (Spark на Scala или PySpark?)

Dask, вероятно, все еще загружает ее, так как я вижу устойчивое 100% использование ЦП в top.

1 Ответ

0 голосов
/ 29 января 2019

Код, который вы показываете в вопросе, вероятно, вообще не занимает много времени, потому что вы на самом деле ничего не загружаете, а просто настраиваете рецепт на работу.Сколько времени это займет, будет зависеть от заданного вами размера фрагмента.

Существуют два основных узких места, которые необходимо учитывать для фактической загрузки:

  • получение данных с диска в память, передача необработанных данных черезинтерфейс с одним диском,
  • синтаксический анализ этих данных в оперативной памяти

С первым вы мало что можете сделать, если находитесь на локальном диске, и вы ожидаетеэто будет небольшая доля.

Последний может пострадать от GIL, даже если dask будет выполняться в нескольких потоках по умолчанию (поэтому может показаться, что используется только один поток).Вы бы хорошо прочитали документацию по dask о различных планировщиках и должны попытаться использовать распределенный планировщик, даже если вы находитесь на одной машине со смесью потоков и процессов.

Наконец, вы, вероятно, невообще не хочу «загружать» данные, но обрабатывать их.Да, вы можете сохранить в памяти Dask, если хотите (dask.persist, как ни странно), но, пожалуйста, не используйте много рабочих для загрузки данных, просто чтобы потом поместить их в фрейм данных Pandas в вашей памяти процесса клиента.

...