Мне нужно загрузить CSV-файл из HDFS с помощью Spark в DataFrame
. Мне было интересно, есть ли улучшение «производительности» (скорость запроса) от DataFrame, поддерживаемого файлом CSV, по сравнению с одним, поддерживаемым файлом parquet?
Обычно я загружаю CSV-файл, как показано ниже, во фрейм данных.
val df1 = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("hdfs://box/path/to/file.csv")
С другой стороны, загрузка паркетного файла (при условии, что я проанализировал CSV-файл, создал схему и сохранил ее в HDFS) выглядит следующим образом.
val df2 = sqlContext.read.parquet("hdfs://box/path/to/file.parquet")
Теперь мне интересно, будут ли затронуты и / или отличаться такие операции, как время следующего запроса.
- df1.where ("col1 = 'some1'"). count ()
- df1.where ("col1 = 'some1' и col2 = 'some2'"). count ()
Мне интересно, знает ли кто-нибудь, есть ли предикат-выталкивание для паркета?
Мне кажется, что паркет чем-то похож на инвертированный индекс, и можно было бы ожидать, что простые фильтры для подсчета будут быстрее для кадра данных на основе паркета, чем для CSV. Что касается кадра данных с поддержкой CSV, я предполагаю, что полное сканирование набора данных должно происходить каждый раз, когда мы фильтруем элементы.
Приветствуются любые пояснения относительно производительности запросов к кадрам данных с паркетной поддержкой и CSV. Также приветствуется любой формат файла, который поможет ускорить подсчет запросов во фреймах данных.
parquets
более эффективны, потому что они хранятсяcolumn
мудро и из-за других факторов. По моему собственному опыту, лучше прочитать набор данных как csv, а затем сохранить его как паркет, а затем прочитать обратно. - person Alberto Bonsanto   schedule 17.09.2016