Загрузить отдельный столбец из файла CSV

#apache-spark #apache-spark-sql

#apache-spark #apache-spark-sql

Вопрос:

У меня есть csv файл, который содержит большое количество столбцов. Я хочу загрузить только один столбец из этого файла с помощью spark .

Я знаю, что мы можем использовать оператор select для фильтрации столбца. Но то, что я хочу, при выполнении самой read операции, должно загружать только один столбец.

Таким образом, я должен быть в состоянии избежать использования дополнительной памяти другими столбцами. Есть ли какой-либо способ сделать это?

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

1. Используйте parquet вместо csv.

2. как упоминал @Jay, вам нужно использовать paraquet / orc или некоторые подобные форматы файлов, где они могут предоставлять метаданные файла и организацию данных с возможностью поиска. в противном случае spark загрузит полную запись в память, применит схему и сможет выбрать этот конкретный столбец.

Ответ №1:

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

Ответ №2:

Spark загрузит полный файл в память и отфильтрует нужный столбец с помощью инструкций select, которые вы упомянули.

Поскольку все операции чтения в spark, считывают и сканируют весь файл, создается средство чтения распределенного потока (средство чтения создается на каждом узле, где были сохранены данные).

И если ваша проблема заключается в чтении данных по столбцам, вы можете сохранить файл в формате parquet и прочитать этот файл. Действительно, parquet — это хранилище с колонками, и оно как раз предназначено для такого типа использования (вы можете проверить это с помощью explain).