Zacznij terazZacznij za darmo

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

Zobacz kurs

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 zmiennej filenames.
    • 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.
  • Utwórz data_frame z dwiema kolumnami.
    • filename powinna zawierać nazwy plików bez części katalogowej. Utwórz ją, przekazując zmienną filenames do funkcji basename().
    • size_bytes powinna zawierać rozmiary tych plików. Utwórz ją, przekazując zmienną filenames do funkcji file.size().
  • Użyj funkcji spark_read_parquet(), aby zaimportować dane timbre do Sparka. Wynik przypisz do timbre_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 <- ___
Edytuj i uruchom kod