Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Veri düzenleme, makine öğrenmesi projelerinin önemli bir yönüdür. Bu makalede, Azure Synapse tarafından desteklenen sunucusuz bir Apache Spark işlemi üzerinde Azure Machine Learning not defterlerini çalıştırarak etkileşimli veri düzenlemeyi öğreneceksiniz.
Bu makalede sunucusuz Spark işlem ekleme ve yapılandırma açıklanmaktadır. Daha sonra makalede, çeşitli kaynaklardan verilere erişmek ve verileri düzenlemek için sunucusuz Spark işleminin nasıl kullanılacağı gösterilmektedir.
Önkoşullar
- Azure aboneliğinde sahiplik veya rol atanma izinleri. Ücretsiz bir Azure hesabı oluşturabilirsiniz.
- Azure Machine Learning çalışma alanı. Daha fazla bilgi için bkz . Çalışma alanı kaynakları oluşturma.
- çalışma alanınızdaki varsayılan dosya paylaşımına yüklenen titanic.csv veri kümesi .
- Azure Data Lake Storage 2. Nesil depolama hesabı. Daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil depolama hesabı oluşturma.
- Aşağıdaki rol atamaları verilmiştir:
- Azure Depolama hesabı erişimi için, Azure Depolama hesabında Katkıda Bulunan ve Depolama Blob Verisi Katkıda Bulunanı rolleri.
- Azure Key Vault sır erişimi için anahtar kasasında Key Vault Sırları Kullanıcı rolü.
Daha fazla bilgi için bakınız:
- Azure Key Vault oluşturma
- Hizmet sorumlusu oluşturma
- Azure Machine Learning çalışma alanına bir Synapse Spark havuzu ekleyin.
Not defteri oturumlarında sunucusuz Spark işlem kullanma
Sunucusuz Spark işlemi kullanmak, etkileşimli veri düzenleme için Spark kümesine erişmenin en kolay yoludur. Synapse Spark havuzuna bağlı tam olarak yönetilen sunucusuz Spark işlemi, Azure Machine Learning not defterlerinde doğrudan kullanılabilir.
Aşağıdaki veri erişim ve düzenleme kaynakları ve yöntemlerinden herhangi birini kullanmak için, dosya veya not defteri sayfasının üst kısmındaki İşlem'in yanında >Sunucusuz Spark İşlem - Kullanılabilir'ini seçerek Spark sunucusuz işlem birimini ekleyin. Bilgi işlemin oturuma bağlanması bir veya iki dakika sürebilir.
Sunucusuz Spark oturumu yapılandırma
Sunucusuz Spark işlemini ekledikten sonra, çeşitli değerleri ayarlayarak veya değiştirerek Spark oturumunu yapılandırabilirsiniz. Spark oturumunu yapılandırmak için:
- Dosya veya not defteri sayfasının sol üst köşesinde Oturumu yapılandır'ı seçin.
-
Oturumu yapılandır ekranında, aşağıdaki ayarlardan herhangi birini değiştirin:
İşlem bölmesinde:
- Düğüm boyutu altındaki açılan menüden farklı bir boyut seçerek makine boyutunu değiştirin.
- 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 varsa farklı bir Yürütücü boyutu seçin.
Ayarlar bölmesinde:
Varsa Apache Spark sürümünü 3.5'ten farklı bir sürümle değiştirin.
Önemli
Apache Spark 3.4 için Azure Synapse Runtime, 31 Mart 2026'da destek sonuna ulaşıyor. Sürekli destek için Apache Spark 3.5'e geçiş. Daha fazla bilgi için bkz. Azure Synapse çalışma zamanları.
Oturum zaman aşımlarını önlemeye yardımcı olmak için dakika cinsinden Oturum zaman aşımı değerini daha yüksek bir sayıya değiştirin.
Yapılandırma ayarları altında, oturumu gerektiği gibi yapılandırmak amacıyla Özellik adı/değer ayarlarını ekleyin.
İpucu
Oturum düzeyinde Conda paketleri kullanıyorsanız,
spark.hadoop.aml.enable_cacheyapılandırma özelliğinitruedeğeriyle eklemek Spark oturumunun soğuk başlangıç süresini kısaltabilir. Oturum düzeyinde Conda paketleriyle oturum başlatma işlemi genellikle ilk seferde 10-15 dakika sürer. Sonraki oturum soğuk başlangıçları, yapılandırma değişkeninin true olarak ayarlanması durumunda genellikle üç ile beş dakika sürer.
Python paketleri bölmesinde:
- Conda dosyasını kullanarak oturumunuzu yapılandırmak için Conda dosyasını karşıya yükle'yi seçin. Conda dosyasını seç yanında Gözat'ı seçin ve ardından makinenizde uygun Conda YAML dosyasına göz atıp dosyayı açarak karşıya yükleyin.
- Özel ortam kullanmak için Özel ortam'ı seçin ve Ortam türü'nin altında özel bir ortam seçin. Daha fazla bilgi için bkz. Yazılım ortamlarını yönetme.
- Tüm yapılandırmaları uygulamak için Uygula'yı seçin.
Oturum yapılandırma değişiklikleri devam eder ve ekli sunucusuz Spark işlemini kullanan diğer not defteri oturumlarında kullanılabilir.
Azure Data Lake Storage'dan verileri içeri aktarma ve düzenleme
Azure Data Lake Storage hesaplarında depolanan verilere erişmek ve verileri düzenlemek için abfss:// kullanın; bunu yaparken ya kullanıcı kimliği geçişi ya da hizmet sorumlusu tabanlı erişimi tercih edin. Kullanıcı kimliği geçişi için ek yapılandırma gerekmez.
Yöntemlerden birini kullanmak için kullanıcı kimliği veya hizmet sorumlusunun Azure Data Lake Storage hesabında Katkıda Bulunan ve Depolama Blob Verileri Katkıda Bulunanırol atamaları olmalıdır.
Kullanıcı kimliği geçişi için, abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA> ile pyspark.pandas formatında bir veri URI'si kullanmak üzere aşağıdaki veri düzenleme kod örneğini çalıştırın. Yer tutucuyu <STORAGE_ACCOUNT_NAME> Azure Data Lake Storage hesabınızın adıyla ve <FILE_SYSTEM_NAME> veri kapsayıcısının adıyla değiştirin.
import pyspark.pandas as pd
df = pd.read_csv(
"abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/titanic.csv",
index_col="PassengerId",
)
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",
)
Hizmet ilkesi kullanma
Azure Data Lake Storage'dan verilere erişmek ve verileri düzenlemek için bir hizmet sorumlusu kullanmak için önce hizmet sorumlusunu aşağıdaki gibi ayarlayın:
Bir hizmet sorumlusu kimliği oluşturun ve gerekli Depolama Blob Verisi Katkıcısı ve Key Vault Sırları Kullanıcısı rollerini atayın.
Uygulama kaydından hizmet sorumlusu kiracı kimliği, istemci kimliği ve istemci gizli anahtarı değerlerini alın ve bu değerler için Azure Key Vault gizli anahtarları oluşturun.
Oturum yapılandırmasına aşağıdaki özellik adı/değer çiftlerini ekleyerek hizmet ana kiracı kimliğini, istemci kimliğini ve istemci gizliliğini ayarlayın. Depolama hesabı adınızı
<STORAGE_ACCOUNT_NAME>ile ve hizmet sorumlusu kiracı kimliğinizi<TENANT_ID>ile değiştirin.Özellik adı Değer fs.azure.account.oauth2.client.id.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.netUygulama (istemci) Kimlik değeri fs.azure.account.oauth2.client.endpoint.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.nethttps://login.microsoftonline.com/<TENANT_ID>/oauth2/tokenfs.azure.account.oauth2.client.secret.<STORAGE_ACCOUNT_NAME>.dfs.core.windows.netİstemci sırrı değeri Aşağıdaki kodu çalıştırın.
get_secret()Koddaki çağrı Key Vault adına ve hizmet ilkesinin kiracı kimliği, istemci kimliği ve istemci gizli anahtarı için oluşturulan Key Vault gizli dizilerinin adlarına bağlıdır.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 a service principal that has access to 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", )Kod örneğinde gösterildiği gibi biçiminde bir veri URI'sini kullanarak
abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/<PATH_TO_DATA>verilerini içeri aktarın ve düzenleyin. Yer tutucuyu<STORAGE_ACCOUNT_NAME>Azure Data Lake Storage hesabınızın adıyla ve<FILE_SYSTEM_NAME>veri kapsayıcısının adıyla değiştirin.import pyspark.pandas as pd df = pd.read_csv( "abfss://<FILE_SYSTEM_NAME>@<STORAGE_ACCOUNT_NAME>.dfs.core.windows.net/data/titanic.csv", index_col="PassengerId", ) 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", )
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. Kimlik bilgilerini Azure Key Vault'ta gizli dizi olarak depolayın ve Spark oturum yapılandırmasında bir özellik olarak ayarlayın.
Aşağıdaki kod parçacıklarından birini çalıştırın.
get_secret()Kod parçacıklarındaki çağrılar, anahtar kasasının adını ve Azure Blob depolama hesabı erişim anahtarı veya SAS belirteci için oluşturulan sırların adlarını gerektirir.Depolama hesabı erişim anahtarını yapılandırmak için aşağıdaki 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 belirtecini yapılandırmak için, aşağıdaki kod parçacığında nasıl yapılacağını gösterdiğimiz gibi,
fs.azure.sas.<BLOB_CONTAINER_NAME>.<STORAGE_ACCOUNT_NAME>.blob.core.windows.netözelliğini ayarlayın.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, )
Olarak biçimlendirilmiş
wasbs://<BLOB_CONTAINER_NAME>@<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<PATH_TO_DATA>veri URI'siyle aşağıdaki veri düzenleme kodunu çalıştırın.import pyspark.pandas as pd df = pd.read_csv( "wasbs://<BLOB_CONTAINER_NAME>@<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/data/titanic.csv", index_col="PassengerId", ) 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", )
Azure Machine Learning veri deposundan verileri içeri aktarma ve düzenleme
Azure Machine Learning veri deposundaki verilere erişmek için veri deposundaki verilere URI biçimindeazureml://datastores/<DATASTORE_NAME>/paths/<PATH_TO_DATA> bir yol tanımlarsınız.
Azure Machine Learning veri deposu ve veri deposu URI'si kullanılarak verisini okumak ve düzenlemek için aşağıdaki kod örneğini çalıştırın.
import pyspark.pandas as pd
df = pd.read_csv(
"azureml://datastores/<DATASTORE_NAME>/paths/data/titanic.csv",
index_col="PassengerId",
)
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/<DATASTORE_NAME>/paths/data/wrangled",
index_col="PassengerId",
)
Azure Machine Learning veri depoları bir Azure depolama hesabı erişim anahtarı, SAS belirteci, hizmet sorumlusu kimlik bilgileri veya kimlik bilgisi olmayan veri erişimi kullanarak verilere erişebilir. Veri deposu türüne ve temel alınan Azure depolama hesabı türüne bağlı olarak uygun kimlik doğrulama mekanizmasını seçin.
Aşağıdaki tabloda, Azure Machine Learning veri depolarındaki verilere erişmeye yönelik kimlik doğrulama mekanizmaları özetlemektedir:
| Depolama hesabı türü | 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 | Evet | Kullanıcı kimliği doğrudan aktarımı* | Kullanıcı kimliğinin Azure Blob depolama hesabında uygun rol atamaları olmalıdır. |
| Azure Data Lake Storage | Hayır | Hizmet sorumlusu | Hizmet sorumlusunun Azure Data Lake Storage depolama hesabında uygun rol atamaları olmalıdır. |
| Azure Data Lake Storage | Evet | Kullanıcı kimliği geçişi | Kullanıcı kimliğinin Azure Data Lake Storage depolama hesabında uygun rol atamaları olmalıdır. |
* Kullanıcı kimliği geçişi, yalnızca yumuşak silme etkinleştirilmemişse Azure Blob depolama hesaplarına yönlendiren kimlik bilgisi gerektirmeyen veri depoları için çalışır.
Varsayılan dosya paylaşımındaki verilere erişme
Azure Machine Learning Stüdyosu'da varsayılan çalışma alanı dosya paylaşımınız, Not Defterleri'ndekiDosyalar sekmesinin altındaki dizin ağacıdır. Not defteri kodu, başka bir yapılandırma olmadan dosyanın mutlak yolunu kullanarak protokolle file:// bu dosya paylaşımında depolanan dosyalara doğrudan erişebilir. Varsayılan dosya paylaşımı hem sunucusuz Spark işlemine hem de bağlı Synapse Spark havuzlarına bağlanır.
Aşağıdaki kod parçacığı, bir veri klasöründe depolanan titanic.csv dosyasındaki verilere doğrudan varsayılan dosya paylaşımındaki kullanıcı adının altında erişir ve verileri düzenler. Yer tutucuyu <USER> kullanıcı adınız ile değiştirin.
import os
import pyspark.pandas as pd
abspath = os.path.abspath(".")
file = "file://" + abspath + "/Users/<USER>/data/titanic.csv"
print(file)
df = pd.read_csv(file, index_col="PassengerId")
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")