#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).