Praca z danymi przy użyciu usługi Spark SQL

Ukończone

Interfejs API ramki danych jest częścią biblioteki Spark o nazwie Spark SQL, która umożliwia analitykom danych używanie wyrażeń SQL do wykonywania zapytań o dane i manipulowania nimi.

Tworzenie obiektów bazy danych w wykazie platformy Spark

Wykaz platformy Spark to magazyn metadanych dla obiektów danych relacyjnych, takich jak widoki i tabele. Środowisko uruchomieniowe platformy Spark może używać wykazu do bezproblemowego integrowania kodu napisanego w dowolnym języku obsługiwanym przez platformę Spark z wyrażeniami SQL, które mogą być bardziej naturalne dla niektórych analityków danych lub deweloperów.

Jednym z najprostszych sposobów udostępniania danych w ramce danych na potrzeby wykonywania zapytań w wykazie platformy Spark jest utworzenie widoku tymczasowego, jak pokazano w poniższym przykładzie kodu:

df.createOrReplaceTempView("products_view")

Widok jest tymczasowy, co oznacza, że jest on automatycznie usuwany na końcu bieżącej sesji. Możesz również utworzyć tabele , które są utrwalane w wykazie, aby zdefiniować bazę danych, do której można wykonywać zapytania przy użyciu usługi Spark SQL.

Tabele to struktury metadanych, które przechowują swoje dane bazowe w lokalizacji magazynu skojarzonej z wykazem. W usłudze Microsoft Fabric dane dla tabel zarządzanych są przechowywane w lokalizacji magazynu Tabel wyświetlanej w usłudze Data Lake, a wszystkie tabele utworzone przy użyciu platformy Spark są tam wymienione.

Pustą tabelę można utworzyć przy użyciu spark.catalog.createTable metody lub zapisać ramkę danych jako tabelę przy użyciu jej saveAsTable metody. Usunięcie tabeli zarządzanej powoduje również usunięcie danych bazowych.

Na przykład poniższy kod zapisuje ramkę danych jako nową tabelę o nazwie products:

df.write.format("delta").saveAsTable("products")

Uwaga

Wykaz platformy Spark obsługuje tabele oparte na plikach w różnych formatach. Preferowany format w usłudze Microsoft Fabric to delta, czyli format technologii danych relacyjnych na platformie Spark o nazwie Delta Lake. Tabele różnicowe obsługują funkcje często spotykane w systemach relacyjnych baz danych, w tym w przypadku transakcji, przechowywania wersji i obsługi danych przesyłanych strumieniowo.

Ponadto można tworzyć tabele zewnętrzne przy użyciu spark.catalog.createExternalTable metody . Tabele zewnętrzne definiują metadane w wykazie, ale pobierają swoje dane bazowe z zewnętrznej lokalizacji magazynu; zazwyczaj folder w obszarze magazynowym Pliki w lakehouse. Usunięcie tabeli zewnętrznej nie powoduje usunięcia danych bazowych.

Napiwek

Tę samą technikę partycjonowania można zastosować do tabel usługi Delta Lake, co omówiono w przypadku plików parquet w poprzedniej lekcji. Partycjonowanie tabel może spowodować lepszą wydajność podczas wykonywania zapytań.

Wykonywanie zapytań dotyczących danych przy użyciu interfejsu API SQL platformy Spark

Interfejs API SQL platformy Spark można używać w kodzie napisanym w dowolnym języku do wykonywania zapytań dotyczących danych w wykazie. Na przykład poniższy kod PySpark używa zapytania SQL do zwracania danych z tabeli products jako ramki danych.

bikes_df = spark.sql("SELECT ProductID, ProductName, ListPrice \
                      FROM products \
                      WHERE Category IN ('Mountain Bikes', 'Road Bikes')")
display(bikes_df)

Wyniki z przykładu kodu będą wyglądać podobnie do poniższej tabeli:

ProductID ProductName ListPrice
771 Górskie — 100 srebrnych, 38 3399.9900
839 Road-750 Black, 52 539.9900
... ... ...

Korzystanie z kodu SQL

W poprzednim przykładzie pokazano, jak używać interfejsu API SQL platformy Spark do osadzania wyrażeń SQL w kodzie platformy Spark. W notesie można również użyć %%sql funkcji magic do uruchomienia kodu SQL, który wysyła zapytania do obiektów w wykazie, w następujący sposób:

%%sql

SELECT Category, COUNT(ProductID) AS ProductCount
FROM products
GROUP BY Category
ORDER BY Category

Przykład kodu SQL zwraca zestaw wyników, który jest automatycznie wyświetlany w notesie jako tabela:

Kategoria ProductCount
Bib-Shorts 3
Stojaki rowerowe 1
Stojaki rowerowe 1
... ...