Azure Machine Learning'de Apache Spark ile Etkileşimli Veri Düzenleme
Veri düzenleme, makine öğrenmesi projelerinin en önemli yönlerinden biri haline gelir. Azure Machine Learning tümleştirmesinin Azure Synapse Analytics ile tümleştirilmesi, Azure Machine Learning Not Defterlerini kullanan etkileşimli veri düzenleme için Azure Synapse tarafından desteklenen bir Apache Spark havuzuna erişim sağlar.
Bu makalede, kullanarak veri düzenlemeyi işlemeyi öğreneceksiniz
- Sunucusuz Spark işlem
- Ekli Synapse Spark havuzu
Önkoşullar
- Azure aboneliği; Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Azure Machine Learning çalışma alanı. Daha fazla bilgi için Çalışma alanı kaynakları oluşturma'ya bakın.
- Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabı. Daha fazla bilgi için Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabı oluşturma adresini ziyaret edin.
- (İsteğe bağlı): Azure Key Vault. Daha fazla bilgi için Azure Key Vault oluşturma adresini ziyaret edin.
- (İsteğe bağlı): Hizmet Sorumlusu. Daha fazla bilgi için Hizmet Sorumlusu Oluşturma'ya bakın.
- (İsteğe bağlı): Azure Machine Learning çalışma alanında ekli bir Synapse Spark havuzu.
Verilerinizi düzenleme görevlerine başlamadan önce gizli dizileri depolama işlemi hakkında bilgi edinin
- Azure Blob depolama hesabı erişim anahtarı
- Paylaşılan Erişim İmzası (SAS) belirteci
- Azure Data Lake Storage (ADLS) 2. Nesil hizmet sorumlusu bilgileri
öğesini seçin. Ayrıca Azure depolama hesaplarındaki rol atamalarını işlemeyi de bilmeniz gerekir. Bu belgedeki aşağıdaki bölümlerde bu kavramlar açıklanmaktadır. Ardından, Azure Machine Learning Not Defterleri'ndeki Spark havuzlarını kullanarak etkileşimli veri hazırlamanın ayrıntılarını keşfedeceğiz.
İpucu
Azure depolama hesabı rol atama yapılandırması hakkında bilgi edinmek için veya kullanıcı kimliği geçişini kullanarak depolama hesaplarınızdaki verilere erişiyorsa daha fazla bilgi için Azure depolama hesaplarında rol atamaları ekleme makalesini ziyaret edin.
Apache Spark ile Etkileşimli Veri Düzenleme
Azure Machine Learning Not Defterlerinde Apache Spark ile etkileşimli veri düzenleme için Azure Machine Learning sunucusuz Spark işlem ve ekli Synapse Spark havuzu sunar. Sunucusuz Spark işlemi, Azure Synapse çalışma alanında kaynak oluşturulmasını gerektirmez. Bunun yerine, tam olarak yönetilen sunucusuz Spark işlemleri Azure Machine Learning Not Defterlerinde doğrudan kullanılabilir hale gelir. Sunucusuz Spark işlemi kullanmak, Azure Machine Learning'de Spark kümesine erişmenin en kolay yoludur.
Azure Machine Learning Not Defterlerinde Sunucusuz Spark işlem
Sunucusuz Spark işlemi varsayılan olarak Azure Machine Learning Not Defterleri'nde kullanılabilir. Not defterinden erişmek için İşlem seçim menüsünden Azure Machine Learning Sunucusuz Spark altında Sunucusuz Spark İşlem'i seçin.
Not Defterleri kullanıcı arabirimi, sunucusuz Spark işlem için Spark oturumu yapılandırmasına yönelik seçenekler de sağlar. Spark oturumu yapılandırmak için:
- Ekranın üst kısmındaki Oturumu yapılandır'ı seçin.
- Açılan menüden Apache Spark sürümü'ne tıklayın.
Önemli
Apache Spark için Azure Synapse Runtime: Duyurular
- Apache Spark 3.2 için Azure Synapse Runtime:
- EOLA Duyuru Tarihi: 8 Temmuz 2023
- Destek Sonu Tarihi: 8 Temmuz 2024. Bu tarihten sonra çalışma zamanı devre dışı bırakılır.
- Apache Spark 3.3:
- EOLA Duyuru Tarihi: 12 Temmuz 2024
- Destek Sonu Tarihi: 31 Mart 2025. Bu tarihten sonra çalışma zamanı devre dışı bırakılır.
- Sürekli destek ve en iyi performans için Apache Spark 3.4'e geçiş öneririz
- Apache Spark 3.2 için Azure Synapse Runtime:
- Açılan menüden Örnek türü'nü seçin. Bu türler şu anda desteklenmektedir:
Standard_E4s_v3
Standard_E8s_v3
Standard_E16s_v3
Standard_E32s_v3
Standard_E64s_v3
- Dakika cinsinden bir Spark Oturumu zaman aşımı değeri girin.
- Yürütücüleri dinamik olarak ayırmak isteyip istemediğinizi seçin
- Spark oturumu için Yürütücü sayısını seçin.
- Açılan menüden Yürütücü boyutu'nu seçin.
- Açılan menüden Sürücü boyutu'nu seçin.
- Spark oturumu yapılandırmak için Conda dosyası kullanmak için Conda dosyasını karşıya yükle onay kutusunu işaretleyin. Ardından Gözat'ı seçin ve istediğiniz Spark oturumu yapılandırmasını içeren Conda dosyasını seçin.
- Özellik ve Değer metin kutularına Yapılandırma ayarları özelliklerini, giriş değerlerini ekleyin ve Ekle'yi seçin.
- Uygula’yı seçin.
- Yeni oturum yapılandırılır mı? açılır penceresinde Oturumu durdur'u seçin.
Oturum yapılandırma değişiklikleri devam eder ve sunucusuz Spark işlemi kullanılarak başlatılan başka bir not defteri oturumunda kullanılabilir hale gelir.
İpucu
Oturum düzeyinde Conda paketleri kullanıyorsanız, yapılandırma değişkenini true olarak ayarlarsanız Spark oturumu soğuk başlangıç süresini geliştirebilirsiniz.spark.hadoop.aml.enable_cache
Oturum düzeyi Conda paketleriyle oturum başlatma işlemi genellikle ilk kez başlatıldığında 10-15 dakika sürer. Ancak, sonraki oturum soğuğu, yapılandırma değişkeninin true olarak ayarlanmasıyla başlar ve genellikle üç-beş dakika sürer.
Azure Data Lake Storage (ADLS) 2. Nesil'den verileri içeri aktarma ve düzenleme
Azure Data Lake Storage (ADLS) 2. Nesil depolama hesaplarında depolanan verilere veri URI'leri ile abfss://
erişebilir ve verileri düzenleyebilirsiniz. Bunu yapmak için iki veri erişim mekanizmasından birini izlemeniz gerekir:
- Kullanıcı kimliği geçişi
- Hizmet sorumlusu tabanlı veri erişimi
İpucu
Sunucusuz Spark işlem ile veri düzenleme ve Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabındaki verilere erişmek için kullanıcı kimliği geçişi, en az sayıda yapılandırma adımı gerektirir.
Kullanıcı kimliği geçişiyle etkileşimli veri düzenlemeye başlamak için:
Kullanıcı kimliğinin Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabında Katkıda Bulunan ve Depolama Blob Verileri Katkıda Bulunanı rol atamalarına sahip olduğunu doğrulayın.
Sunucusuz Spark işlemini kullanmak için İşlem seçim menüsünden Azure Machine Learning Sunucusuz Spark altında Sunucusuz Spark İşlem'i seçin.
Ekli bir Synapse Spark havuzu kullanmak için İşlem seçim menüsünden Synapse Spark havuzları altında ekli bir Synapse Spark havuzu seçin.
Bu Titanik veri düzenleme kodu örneği, ve
pyspark.ml.feature.Imputer
ilepyspark.pandas
biçimindeabfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>
bir veri URI'sinin kullanımını gösterir.import pyspark.pandas as pd from pyspark.ml.feature import Imputer df = pd.read_csv( "abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/titanic.csv", index_col="PassengerId", ) imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy( "mean" ) # Replace missing values in Age column with the mean value df.fillna( value={"Cabin": "None"}, inplace=True ) # Fill Cabin column with value "None" if missing df.dropna(inplace=True) # Drop the rows which still have any missing value df.to_csv( "abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/wrangled", index_col="PassengerId", )
Not
Bu Python kod örneği kullanır
pyspark.pandas
. Yalnızca Spark çalışma zamanı sürüm 3.2 veya üzeri bunu destekler.
Hizmet sorumlusu aracılığıyla erişime göre verileri düzenlemek için:
Hizmet sorumlusunun Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabında Katkıda Bulunan ve Depolama Blob Verileri Katkıda Bulunanı rol atamalarına sahip olduğunu doğrulayın.
Hizmet sorumlusu kiracı kimliği, istemci kimliği ve istemci gizli anahtarı değerleri için Azure Key Vault gizli dizileri oluşturun.
İşlem seçimi menüsünde Azure Machine Learning Sunucusuz Spark altında Sunucusuz Spark işlem'i seçin. İşlem seçim menüsünden Synapse Spark havuzları altında ekli bir Synapse Spark havuzu da seçebilirsiniz.
Yapılandırmada hizmet sorumlusu kiracı kimliği, istemci kimliği ve istemci gizli anahtarı değerlerini ayarlayın ve aşağıdaki kod örneğini yürütür.
get_secret()
Koddaki çağrı, Azure Key Vault'un adına ve hizmet sorumlusu kiracı kimliği, istemci kimliği ve istemci gizli dizisi için oluşturulan Azure Key Vault gizli dizilerinin adlarına bağlıdır. Yapılandırmada ilgili özellik adını/değerlerini ayarlayın:- İstemci Kimliği özelliği:
fs.azure.account.oauth2.client.id.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net
- İstemci gizli anahtarı özelliği:
fs.azure.account.oauth2.client.secret.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net
- Kiracı Kimliği özelliği:
fs.azure.account.oauth2.client.endpoint.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net
- Kiracı Kimliği değeri:
https://login.microsoftonline.com/<TENANT_ID>/oauth2/token
from pyspark.sql import SparkSession sc = SparkSession.builder.getOrCreate() token_library = sc._jvm.com.microsoft.azure.synapse.tokenlibrary.TokenLibrary # Set up service principal tenant ID, client ID and secret from Azure Key Vault client_id = token_library.getSecret("<KEY_VAULT_NAME>", "<CLIENT_ID_SECRET_NAME>") tenant_id = token_library.getSecret("<KEY_VAULT_NAME>", "<TENANT_ID_SECRET_NAME>") client_secret = token_library.getSecret("<KEY_VAULT_NAME>", "<CLIENT_SECRET_NAME>") # Set up service principal which has access of the data sc._jsc.hadoopConfiguration().set( "fs.azure.account.auth.type.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net", "OAuth" ) sc._jsc.hadoopConfiguration().set( "fs.azure.account.oauth.provider.type.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider", ) sc._jsc.hadoopConfiguration().set( "fs.azure.account.oauth2.client.id.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net", client_id, ) sc._jsc.hadoopConfiguration().set( "fs.azure.account.oauth2.client.secret.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net", client_secret, ) sc._jsc.hadoopConfiguration().set( "fs.azure.account.oauth2.client.endpoint.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net", "https://login.microsoftonline.com/" + tenant_id + "/oauth2/token", )
- İstemci Kimliği özelliği:
Titanic verilerini kullanarak, kod örneğinde gösterildiği gibi biçimindeki veri URI'sini
abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>
kullanarak verileri içeri aktarın ve düzenleyin.
Azure Blob depolamadan verileri içeri aktarma ve düzenleme
Azure Blob depolama verilerine depolama hesabı erişim anahtarı veya paylaşılan erişim imzası (SAS) belirteci ile erişebilirsiniz. Bu kimlik bilgilerini Azure Key Vault'ta gizli dizi olarak depolamalı ve bunları oturum yapılandırmasında özellik olarak ayarlamalısınız.
Etkileşimli veri düzenlemeye başlamak için:
Sol Azure Machine Learning stüdyosu panelde Not Defterleri'ni seçin.
İşlem seçimi menüsünde Azure Machine Learning Sunucusuz Spark altında Sunucusuz Spark işlem'i seçin. İşlem seçim menüsünden Synapse Spark havuzları altında ekli bir Synapse Spark havuzu da seçebilirsiniz.
Azure Machine Learning Not Defterlerinde veri erişimi için depolama hesabı erişim anahtarını veya paylaşılan erişim imzası (SAS) belirtecini yapılandırmak için:
Erişim anahtarı için bu kod parçacığında gösterildiği gibi özelliğini ayarlayın
fs.azure.account.key.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net
:from pyspark.sql import SparkSession sc = SparkSession.builder.getOrCreate() token_library = sc._jvm.com.microsoft.azure.synapse.tokenlibrary.TokenLibrary access_key = token_library.getSecret("<KEY_VAULT_NAME>", "<ACCESS_KEY_SECRET_NAME>") sc._jsc.hadoopConfiguration().set( "fs.azure.account.key.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net", access_key )
SAS belirteci için, bu kod parçacığında gösterildiği gibi özelliğini ayarlayın
fs.azure.sas.<BLOB_CONTAINER_NAME>.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net
:from pyspark.sql import SparkSession sc = SparkSession.builder.getOrCreate() token_library = sc._jvm.com.microsoft.azure.synapse.tokenlibrary.TokenLibrary sas_token = token_library.getSecret("<KEY_VAULT_NAME>", "<SAS_TOKEN_SECRET_NAME>") sc._jsc.hadoopConfiguration().set( "fs.azure.sas.<BLOB_CONTAINER_NAME>.<STORAGE_ACCOUNT_NAME>.blob.core.windows.net", sas_token, )
Not
Önceki
get_secret()
kod parçacıklarındaki çağrılar, Azure Key Vault'un adını ve Azure Blob depolama hesabı erişim anahtarı veya SAS belirteci için oluşturulan gizli dizilerin adlarını gerektirir.
Veri düzenleme kodunu aynı not defterinde yürütür. Veri URI'sini, bu kod parçacığının gösterdiğine benzer şekilde
wasbs://<BLOB_CONTAINER_NAME>@<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<PATH_TO_DATA>
olarak biçimlendirin:import pyspark.pandas as pd from pyspark.ml.feature import Imputer df = pd.read_csv( "wasbs://<BLOB_CONTAINER_NAME>@<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/data/titanic.csv", index_col="PassengerId", ) imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy( "mean" ) # Replace missing values in Age column with the mean value df.fillna( value={"Cabin": "None"}, inplace=True ) # Fill Cabin column with value "None" if missing df.dropna(inplace=True) # Drop the rows which still have any missing value df.to_csv( "wasbs://<BLOB_CONTAINER_NAME>@<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/data/wrangled", index_col="PassengerId", )
Not
Bu Python kod örneği kullanır
pyspark.pandas
. Yalnızca Spark çalışma zamanı sürüm 3.2 veya üzeri bunu destekler.
Azure Machine Learning Veri Deposu'ndan verileri içeri aktarma ve düzenleme
Azure Machine Learning Veri Deposu'ndan verilere erişmek için URI biçiminde azureml://datastores/<DATASTORE_NAME>/paths/<PATH_TO_DATA>
veri deposundaki verilere yönelik bir yol tanımlayın. Bir Notebooks oturumunda Azure Machine Learning Veri Deposundaki verileri etkileşimli olarak düzenlemek için:
İşlem seçim menüsünden Azure Machine Learning Sunucusuz Spark'ın altında Sunucusuz Spark işlem'i seçin veya İşlem seçim menüsünden Synapse Spark havuzları altında ekli bir Synapse Spark havuzu seçin.
Bu kod örneği, veri deposu URI'sini
pyspark.pandas
, vepyspark.ml.feature.Imputer
kullanarakazureml://
Azure Machine Learning Datastore'dan Titanic verilerinin nasıl okunup düzenlenip düzenlenip düzenlenişlerini gösterir.import pyspark.pandas as pd from pyspark.ml.feature import Imputer df = pd.read_csv( "azureml://datastores/workspaceblobstore/paths/data/titanic.csv", index_col="PassengerId", ) imputer = Imputer(inputCols=["Age"], outputCol="Age").setStrategy( "mean" ) # Replace missing values in Age column with the mean value df.fillna( value={"Cabin": "None"}, inplace=True ) # Fill Cabin column with value "None" if missing df.dropna(inplace=True) # Drop the rows which still have any missing value df.to_csv( "azureml://datastores/workspaceblobstore/paths/data/wrangled", index_col="PassengerId", )
Not
Bu Python kod örneği kullanır
pyspark.pandas
. Yalnızca Spark çalışma zamanı sürüm 3.2 veya üzeri bunu destekler.
Azure Machine Learning veri depoları, Azure depolama hesabı kimlik bilgilerini kullanarak verilere erişebilir
- erişim anahtarı
- SAS belirteci
- hizmet sorumlusu
veya kimlik bilgisi olmayan veri erişimi kullanır. Veri deposu türüne ve temel alınan Azure depolama hesabı türüne bağlı olarak, veri erişimini sağlamak için uygun bir kimlik doğrulama mekanizması seçin. Bu tablo, Azure Machine Learning veri depolarındaki verilere erişmek için kimlik doğrulama mekanizmalarını özetler:
Storage account type | Kimlik bilgisi olmayan veri erişimi | Veri erişim mekanizması | Rol atamaları |
---|---|---|---|
Azure Blob | Hayır | Erişim anahtarı veya SAS belirteci | Rol ataması gerekmez |
Azure Blob | Yes | Kullanıcı kimliği geçişi* | Kullanıcı kimliğinin Azure Blob depolama hesabında uygun rol atamaları olmalıdır |
Azure Data Lake Storage (ADLS) 2. Nesil | Hayır | Hizmet sorumlusu | Hizmet sorumlusunun Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabında uygun rol atamaları olmalıdır |
Azure Data Lake Storage (ADLS) 2. Nesil | Yes | Kullanıcı kimliği geçişi | Kullanıcı kimliği, Azure Data Lake Storage (ADLS) 2. Nesil depolama hesabında uygun rol atamalarına sahip olmalıdır |
*Kullanıcı kimliği geçişi, yalnızca geçici silme etkinleştirilmemişse Azure Blob depolama hesaplarına işaret eden kimlik bilgisi olmayan veri depoları için çalışır.
Varsayılan dosya paylaşımındaki verilere erişme
Varsayılan dosya paylaşımı hem sunucusuz Spark işlemine hem de bağlı Synapse Spark havuzlarına bağlanır.
Azure Machine Learning stüdyosu, varsayılan dosya paylaşımındaki dosyalar Dosyalar sekmesinin altındaki dizin ağacında gösterilir. Not defteri kodu, bu dosya paylaşımında depolanan dosyalara protokolle ve dosyanın mutlak yoluyla file://
birlikte, daha fazla yapılandırma olmadan doğrudan erişebilir. Bu kod parçacığı, varsayılan dosya paylaşımında depolanan bir dosyaya nasıl eriş yapılacağını gösterir:
import os
import pyspark.pandas as pd
from pyspark.ml.feature import Imputer
abspath = os.path.abspath(".")
file = "file://" + abspath + "/Users/<USER>/data/titanic.csv"
print(file)
df = pd.read_csv(file, index_col="PassengerId")
imputer = Imputer(
inputCols=["Age"],
outputCol="Age").setStrategy("mean") # Replace missing values in Age column with the mean value
df.fillna(value={"Cabin" : "None"}, inplace=True) # Fill Cabin column with value "None" if missing
df.dropna(inplace=True) # Drop the rows which still have any missing value
output_path = "file://" + abspath + "/Users/<USER>/data/wrangled"
df.to_csv(output_path, index_col="PassengerId")
Not
Bu Python kod örneği kullanır pyspark.pandas
. Yalnızca Spark çalışma zamanı sürüm 3.2 veya üzeri bunu destekler.