Работа с файлами Parquet
CSV-файлы отлично подходят для сохранения прямоугольных объектов данных (например, data.frame в R или DataFrame в Spark) на диск. Однако их существенный недостаток — низкая скорость чтения и записи, что делает их непригодными для работы с большими наборами данных. Формат Parquet предлагает более производительную альтернативу. Файлы Parquet используются не только в Spark, но и в других инструментах экосистемы Hadoop: Shark, Impala, Hive и Pig.
Строго говоря, выражение файл Parquet не вполне точно. Когда данные сохраняются в формате Parquet, на диске создаётся целая директория файлов. Данные распределяются по нескольким файлам .parquet, что упрощает их хранение на нескольких машинах, а также создаются метаданные с описанием содержимого каждого столбца.
sparklyr позволяет импортировать файлы Parquet с помощью функции spark_read_parquet(). Она принимает подключение к Spark, строку с именем создаваемого Spark DataFrame и путь к директории Parquet. Обратите внимание: эта функция загружает данные напрямую в Spark, что, как правило, быстрее, чем сначала импортировать их в R, а затем использовать copy_to() для копирования данных из R в Spark.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Подключение к Spark уже создано и доступно как spark_conn. Строка с путём к директории Parquet (в файловой системе, где запущен R) доступна как parquet_dir.
- С помощью
dir()получите список абсолютных путей к файлам в директории Parquet и сохраните результат в переменнуюfilenames.- Первый аргумент — директория, содержимое которой нужно перечислить:
parquet_dir. - Чтобы получить абсолютные (а не относительные) пути, передайте также
full.names = TRUE.
- Первый аргумент — директория, содержимое которой нужно перечислить:
- Создайте
data_frameс двумя столбцами.filenameдолжен содержать имена файлов без пути к директории. Получите их, передавfilenamesв функциюbasename().size_bytesдолжен содержать размеры этих файлов. Получите их, передавfilenamesв функциюfile.size().
- С помощью
spark_read_parquet()импортируйте данные о тембре в Spark и сохраните результат в переменнуюtimbre_tbl.- Первый аргумент — подключение к Spark.
- Второй аргумент —
"timbre". - Третий аргумент —
parquet_dir.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# parquet_dir has been pre-defined
parquet_dir
# List the files in the parquet dir
filenames <- ___
# Show the filenames and their sizes
data_frame(
filename = ___,
size_bytes = ___
)
# Import the data into Spark
timbre_tbl <- ___