#csv #apache-spark #hadoop #hdfs
#csv #apache-spark #hadoop #hdfs
Вопрос:
Я пытаюсь выполнить машинное обучение для набора данных объемом 20 ГБ, который находится в .csv
формате. Одна из вещей, которые рекламируются в spark, — это скорость. Я немного новичок в spark. В среде pyspark, если я просто выполняю spark.read.csv(file.csv)
, это занимает около 5 секунд в NFS и 1,5 секунды в HDFS. Проблема в том, что заголовки помечены _C1, _C2, _C3 вместо использования фактических заголовков набора данных. Итак, я подумал, что попробую следующее, чтобы заставить dataset читать:
spark.read.csv(headers= "true", inferSchema="true", path= file.csv)
фрейм данных предоставляет соответствующие схемы, однако это занимает 10 минут в NFS и дольше в HDFS, что медленнее, чем в Pandas. Есть ли параметр конфигурации, который мне нужно установить, чтобы ускорить работу.
Я пробовал использовать эти наборы данных в среде dask, что занимает всего 4 секунды, а фрейм данных dask предоставляет все соответствующие метки и заголовки, но на моей карте памяти недостаточно памяти для загрузки всех данных, поэтому я не могу использовать эту опцию.
Комментарии:
1. Согласно документам Spark , для запуска требуется передача данных
inferSchema="true"
. Можете ли вы заранее предоставить схему? Кроме того, любопытно, почему вы не можете использовать dask? Dask выполняет отложенную оценку по всему кластеру, поэтому вам не нужно загружать все данные в память2. Spark работает быстро, потому что он распространяется. Вы упомянули карту памяти, что заставляет меня думать, что это устройство интернета вещей, и, возможно, spark не подходит для вашего использования
3. Dask не требует, чтобы вы загружали все данные в память одновременно.
4. если вы не хотите создавать схему вручную, я обычно использую следующий «взлом» — использую образец файла с данными с несколькими строками данных, загружаю его с помощью
inferSchema="true"
, получаю схему из результирующего фрейма данных, а затем использую эту схему при чтении CSV-файла (черезschema=...
параметр)