1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wprowadzenie do Spark z pakietem sparklyr w R

Connected

ćwiczenie

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")

Instrukcje

100 XP

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.