Praca z plikami parquet
Pliki CSV świetnie nadają się do zapisywania zawartości prostokątnych obiektów danych (takich jak data.frame w R czy DataFrames w Sparku) na dysku. Problem w tym, że ich odczyt i zapis jest bardzo wolny, co sprawia, że przy dużych zbiorach danych stają się niepraktyczne. Pliki parquet stanowią wydajniejszą alternatywę. Poza zastosowaniem w Sparku, można ich używać z innymi narzędziami ekosystemu Hadoop, takimi jak Shark, Impala, Hive czy Pig.
Ściślej rzecz ujmując, pojęcie pliku parquet jest pewnym uproszczeniem. Gdy zapisujesz dane w formacie parquet, w rzeczywistości powstaje cały katalog plików. Dane są rozdzielone między wiele plików .parquet – co ułatwia ich przechowywanie na wielu maszynach – a obok nich znajdują się pliki metadanych opisujące zawartość poszczególnych kolumn.
sparklyr umożliwia wczytywanie plików parquet za pomocą funkcji spark_read_parquet(). Funkcja ta przyjmuje połączenie ze Sparkiem, ciąg znaków określający nazwę tworzonego Spark DataFrame oraz ścieżkę do katalogu parquet. Warto wiedzieć, że dane są importowane bezpośrednio do Sparka – jest to zazwyczaj szybsze niż najpierw importowanie ich do R, a następnie kopiowanie do Sparka przy użyciu copy_to().
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Ciąg znaków wskazujący katalog parquet (w systemie plików, w którym działa R) jest dostępny jako parquet_dir.
- Użyj funkcji
dir(), aby wylistować bezwzględne ścieżki plików w katalogu parquet. Wynik przypisz do zmiennejfilenames.- Pierwszy argument powinien wskazywać katalog, którego pliki chcesz wylistować – czyli
parquet_dir. - Aby uzyskać ścieżki bezwzględne (zamiast względnych), przekaż również
full.names = TRUE.
- Pierwszy argument powinien wskazywać katalog, którego pliki chcesz wylistować – czyli
- Utwórz
data_framez dwiema kolumnami.filenamepowinna zawierać nazwy plików bez części katalogowej. Utwórz ją, przekazując zmiennąfilenamesdo funkcjibasename().size_bytespowinna zawierać rozmiary tych plików. Utwórz ją, przekazując zmiennąfilenamesdo funkcjifile.size().
- Użyj funkcji
spark_read_parquet(), aby zaimportować dane timbre do Sparka. Wynik przypisz dotimbre_tbl.- Pierwszy argument to połączenie ze Sparkiem.
- Drugi argument to
"timbre". - Trzeci argument to
parquet_dir.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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 <- ___