Aracılığıyla paylaş


Apache Spark havuzlarıyla veri düzenleme (kullanım dışı)

ŞUNUN IÇIN GEÇERLIDIR:Python SDK azureml v1

Uyarı

Python SDK v1'de kullanılabilen Azure Machine Learning ile Azure Synapse Analytics tümleştirmesi kullanım dışıdır. Kullanıcılar, Azure Machine Learning'e kayıtlı Synapse çalışma alanını bağlı hizmet olarak kullanmaya devam edebilir. Öte yandan artık yeni Synapse çalışma alanları Azure Machine Learning'e bağlı hizmet olarak kaydedilemez. CLI v2 ve Python SDK v2'de kullanılabilen sunucusuz Spark işlem ve bağlı Synapse Spark havuzları kullanmanızı öneririz. Daha fazla bilgi için https://aka.ms/aml-spark adresini ziyaret edin.

Bu makalede, Jupyter not defterinde Azure Synapse Analytics tarafından desteklenen ayrılmış bir Synapse oturumunda veri düzenleme görevlerini etkileşimli olarak gerçekleştirmeyi öğreneceksiniz. Bu görevler Azure Machine Learning Python SDK'sını gerektirir. Azure Machine Learning işlem hatları hakkında daha fazla bilgi için Makine öğrenmesi işlem hattınızda (önizleme) Apache Spark kullanma (Azure Synapse Analytics tarafından desteklenen) bölümünü ziyaret edin. Azure Synapse Analytics'i Synapse çalışma alanıyla kullanma hakkında daha fazla bilgi için Azure Synapse Analytics kullanmaya başlama serisini ziyaret edin.

Azure Machine Learning ve Azure Synapse Analytics tümleştirmesi

Azure Machine Learning ile Azure Synapse Analytics tümleştirmesi (önizleme) ile etkileşimli veri keşfi ve hazırlığı için Azure Synapse tarafından desteklenen bir Apache Spark havuzu ekleyebilirsiniz. Bu tümleştirmeyle, makine öğrenmesi modellerinizi eğitmek için kullandığınız Python not defteri içinde büyük ölçekte veri düzenleme için ayrılmış bir işlem kaynağınız olabilir.

Önkoşullar

Veri düzenleme görevleri için Synapse Spark havuzunu başlatma

Apache Spark havuzuyla veri hazırlığı başlatmak için ekli Spark Synapse işlem adını belirtin. Bu adı ekli işlem sekmesinin altındaki Azure Machine Learning stüdyosu bulabilirsiniz.

get attached compute name

Önemli

Apache Spark havuzunu kullanmaya devam etmek için, veri hazırlama görevleriniz boyunca hangi işlem kaynağının kullanılacağını belirtmeniz gerekir. Tek kod satırları ve %%synapse birden çok satır için kullanın%synapse:

%synapse start -c SynapseSparkPoolAlias

Oturum başladıktan sonra oturumun meta verilerini de kontrol edebilirsiniz:

%synapse meta

Apache Spark oturumunuz sırasında kullanılacak bir Azure Machine Learning ortamı belirtebilirsiniz. Yalnızca ortamda belirtilen Conda bağımlılıkları geçerlilik kazanır. Docker görüntüleri desteklenmez.

Uyarı

Ortam Conda bağımlılıklarında belirtilen Python bağımlılıkları Apache Spark havuzlarında desteklenmez. Şu anda python sürümünüzü denetlemek için betiğinize dahil sys.version_info et özelliği yalnızca sabit Python sürümleri desteklenmektedir

Bu kod, oturum başlamadan önce sürüm 1.20.0 ve numpy sürüm 1.17.0'ı yüklemek azureml-core için ortam değişkenini oluştururmyenv. Daha sonra bu ortamı Apache Spark oturum start deyiminize ekleyebilirsiniz.


from azureml.core import Workspace, Environment

# creates environment with numpy and azureml-core dependencies
ws = Workspace.from_config()
env = Environment(name="myenv")
env.python.conda_dependencies.add_pip_package("azureml-core==1.20.0")
env.python.conda_dependencies.add_conda_package("numpy==1.17.0")
env.register(workspace=ws)

Özel ortamınızda Apache Spark havuzuyla veri hazırlamaya başlamak için hem Apache Spark havuzu adını hem de Apache Spark oturumu sırasında kullanılacak ortamı belirtin. Abonelik kimliğinizi, makine öğrenmesi çalışma alanı kaynak grubunu ve makine öğrenmesi çalışma alanının adını sağlayabilirsiniz.

Önemli

Bağlı Synapse çalışma alanında Oturum düzeyi paketlerine izin ver'i etkinleştirdiğinizden emin olun.

enable session level packages

%synapse start -c SynapseSparkPoolAlias -e myenv -s AzureMLworkspaceSubscriptionID -r AzureMLworkspaceResourceGroupName -w AzureMLworkspaceName

Depolama alanından veri yükleme

Apache Spark oturumu başlatıldıktan sonra, hazırlamak istediğiniz verileri okuyun. Azure Blob depolama ve Azure Data Lake Depolama Nesil 1 ve 2 için veri yükleme desteklenir.

Bu depolama hizmetlerinden veri yüklemek için iki seçeneğiniz vardır:

Bu depolama hizmetlerine erişmek için Depolama Blob Veri Okuyucusu izinlerine sahip olmanız gerekir. Verileri bu depolama hizmetlerine geri yazmak için blob veri katkıda bulunanı izinlerine Depolama gerekir. Depolama izinleri ve rolleri hakkında daha fazla bilgi edinin.

Hadoop Dağıtılmış Dosyalar Sistemi (HDFS) yolu ile veri yükleme

İlgili HDFS yolu ile depolama alanından veri yüklemek ve okumak için, veri erişim kimlik doğrulaması kimlik bilgilerinizin kullanılabilir olması gerekir. Bu kimlik bilgileri depolama türünüze bağlı olarak farklılık gösterir. Bu kod örneği, paylaşılan erişim imzanız (SAS) belirteciniz veya erişim anahtarınız ile Bir Azure Blob depolamadan Spark veri çerçevesine veri okumayı gösterir:

%%synapse

# setup access key or SAS token
sc._jsc.hadoopConfiguration().set("fs.azure.account.key.<storage account name>.blob.core.windows.net", "<access key>")
sc._jsc.hadoopConfiguration().set("fs.azure.sas.<container name>.<storage account name>.blob.core.windows.net", "<sas token>")

# read from blob 
df = spark.read.option("header", "true").csv("wasbs://demo@dprepdata.blob.core.windows.net/Titanic.csv")

Bu kod örneği, hizmet sorumlusu kimlik bilgilerinizle Azure Data Lake Depolama 1. Nesil'den (ADLS 1. Nesil) verilerin nasıl okunduğu gösterilir:

%%synapse

# setup service principal which has access of the data
sc._jsc.hadoopConfiguration().set("fs.adl.account.<storage account name>.oauth2.access.token.provider.type","ClientCredential")

sc._jsc.hadoopConfiguration().set("fs.adl.account.<storage account name>.oauth2.client.id", "<client id>")

sc._jsc.hadoopConfiguration().set("fs.adl.account.<storage account name>.oauth2.credential", "<client secret>")

sc._jsc.hadoopConfiguration().set("fs.adl.account.<storage account name>.oauth2.refresh.url",
"https://login.microsoftonline.com/<tenant id>/oauth2/token")

df = spark.read.csv("adl://<storage account name>.azuredatalakestore.net/<path>")

Bu kod örneği, hizmet sorumlusu kimlik bilgilerinizle Azure Data Lake Depolama 2. Nesil'den (ADLS 2. Nesil) verileri okuma adımlarını gösterir:

%%synapse

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

df = spark.read.csv("abfss://<container name>@<storage account>.dfs.core.windows.net/<path>")

Kayıtlı veri kümelerindeki verileri okuma

Ayrıca mevcut kayıtlı bir veri kümesini çalışma alanınıza yerleştirebilir ve spark veri çerçevesine dönüştürürseniz bu veri kümesi üzerinde veri hazırlama işlemi gerçekleştirebilirsiniz. Bu örnek çalışma alanında kimlik doğrulaması yapar, blob depolamadaki dosyalara başvuran kayıtlı bir TabularDatasetblob_dset alır ve bu TabularDataset'i Spark veri çerçevesine dönüştürür. Veri kümelerinizi Spark veri çerçevelerine dönüştürdüğünüzde, veri keşfi ve hazırlık kitaplıklarını kullanabilirsiniz pyspark .

%%synapse

from azureml.core import Workspace, Dataset

subscription_id = "<enter your subscription ID>"
resource_group = "<enter your resource group>"
workspace_name = "<enter your workspace name>"

ws = Workspace(workspace_name = workspace_name,
               subscription_id = subscription_id,
               resource_group = resource_group)

dset = Dataset.get_by_name(ws, "blob_dset")
spark_df = dset.to_spark_dataframe()

Veri düzenleme görevlerini gerçekleştirme

Verilerinizi alıp keşfettikten sonra veri düzenleme görevlerini gerçekleştirebilirsiniz. Bu kod örneği, önceki bölümdeki HDFS örneğine göre genişletiliyor. Survivor sütununa göre Spark veri çerçevesi df ve Yaş ölçütüne göre listeleyen gruplardaki verileri filtreler:

%%synapse

from pyspark.sql.functions import col, desc

df.filter(col('Survived') == 1).groupBy('Age').count().orderBy(desc('count')).show(10)

df.show()

Verileri depolama alanına kaydetme ve Spark oturumlarını durdurma

Veri keşfiniz ve hazırlığınız tamamlandıktan sonra, hazır verilerinizi daha sonra kullanmak üzere Azure'daki depolama hesabınızda depolayın. Bu kod örneğinde, hazırlanan veriler Azure Blob depolama alanına geri yazılır ve dizindeki training_data özgün Titanic.csv dosyanın üzerine yazılır. Depolama alanına geri yazmak için blob veri katkıda bulunanı izinlerine Depolama gerekir. Daha fazla bilgi için Blob verilerine erişim için Azure rolü atama adresini ziyaret edin.

%% synapse

df.write.format("csv").mode("overwrite").save("wasbs://demo@dprepdata.blob.core.windows.net/training_data/Titanic.csv")

Veri hazırlamayı tamamladıktan ve hazır verilerinizi depolama alanına kaydettikten sonra apache Spark havuzunuzun kullanımını şu komutla sonlandırın:

%synapse stop

Hazırlanan verileri temsil eden bir veri kümesi oluşturma

Model eğitimi için hazırlanan verilerinizi kullanmaya hazır olduğunuzda, bir Azure Machine Learning veri deposuyla depolama alanınıza bağlanın ve bir Azure Machine Learning veri kümesiyle kullanmak istediğiniz dosyayı veya dosyayı belirtin.

Bu kod örneği

  • Hazır verilerinizi kaydettiğiniz depolama hizmetine bağlanan bir veri deposu oluşturduğunuzu varsayar
  • Var olan veri depolarını - mydatastore - get() yöntemiyle çalışma alanından ws alır.
  • Dizininde mydatastoretraining_data bulunan hazırlanmış veri dosyalarına başvurmak için bir FileDataset, train_dsoluşturur.
  • değişkeni input1oluşturur. Daha sonra bu değişken, veri kümesinin train_ds veri dosyalarını eğitim görevleriniz için bir işlem hedefinin kullanımına açabilir.
from azureml.core import Datastore, Dataset

datastore = Datastore.get(ws, datastore_name='mydatastore')

datastore_paths = [(datastore, '/training_data/')]
train_ds = Dataset.File.from_files(path=datastore_paths, validate=True)
input1 = train_ds.as_mount()

Synapse Spark havuzuna deneme çalıştırması göndermek için bir ScriptRunConfig kullanma

Veri hazırlama görevlerinizi otomatikleştirmeye ve üretime hazırsanız ScriptRunConfig nesnesiyle ekli synapse Spark havuzuna deneme çalıştırması gönderebilirsiniz. Benzer şekilde, bir Azure Machine Learning işlem hattınız varsa Synapse Spark havuzunuzu işlem hattınızdaki veri hazırlama adımı için işlem hedefi olarak belirtmek üzere SynapseSparkStep kullanabilirsiniz. Verilerinizin Synapse Spark havuzunda kullanılabilirliği veri kümenizin türüne bağlıdır.

  • FileDataset için yöntemini kullanabilirsiniz as_hdfs() . Çalıştırma gönderildiğinde veri kümesi, Hadoop dağıtılmış dosya sistemi (HFDS) olarak Synapse Spark havuzu için kullanılabilir hale getirilir
  • TabularDataset için yöntemini kullanabilirsiniz as_named_input()

Aşağıdaki kod örneği

  • Önceki kod örneğinde oluşturulan FileDataset train_dsdosyasından değişken input2 oluşturur
  • sınıfıyla HDFSOutputDatasetConfiguration değişken output oluşturur. Çalıştırma tamamlandıktan sonra bu sınıf, çalıştırmanın çıkışını veri kümesi test olarak veri deposuna mydatastore kaydetmemize olanak tanır. Azure Machine Learning çalışma alanında veri test kümesi adı altında kaydedilir registered_dataset
  • Çalıştırmanın Synapse Spark havuzunda gerçekleştirmek için kullanması gereken ayarları yapılandırır
  • ScriptRunConfig parametrelerini tanımlar:
    • dataprep.py Çalıştırma için betiği kullanma
    • Giriş olarak kullanılacak verileri ve bu verilerin Synapse Spark havuzu için nasıl kullanılabilir hale getirileceğini belirtin
    • Çıkış verilerinin output depolandığı yeri belirtme
from azureml.core import Dataset, HDFSOutputDatasetConfig
from azureml.core.environment import CondaDependencies
from azureml.core import RunConfiguration
from azureml.core import ScriptRunConfig 
from azureml.core import Experiment

input2 = train_ds.as_hdfs()
output = HDFSOutputDatasetConfig(destination=(datastore, "test").register_on_complete(name="registered_dataset")

run_config = RunConfiguration(framework="pyspark")
run_config.target = synapse_compute_name

run_config.spark.configuration["spark.driver.memory"] = "1g" 
run_config.spark.configuration["spark.driver.cores"] = 2 
run_config.spark.configuration["spark.executor.memory"] = "1g" 
run_config.spark.configuration["spark.executor.cores"] = 1 
run_config.spark.configuration["spark.executor.instances"] = 1 

conda_dep = CondaDependencies()
conda_dep.add_pip_package("azureml-core==1.20.0")

run_config.environment.python.conda_dependencies = conda_dep

script_run_config = ScriptRunConfig(source_directory = './code',
                                    script= 'dataprep.py',
                                    arguments = ["--file_input", input2,
                                                 "--output_dir", output],
                                    run_config = run_config)

Spark yapılandırması ve genel spark yapılandırması hakkında run_config.spark.configuration daha fazla bilgi için SparkConfiguration Sınıfı ve Apache Spark yapılandırma belgelerini ziyaret edin.

Nesnenizi ScriptRunConfig ayarladıktan sonra çalıştırmayı gönderebilirsiniz.

from azureml.core import Experiment 

exp = Experiment(workspace=ws, name="synapse-spark") 
run = exp.submit(config=script_run_config) 
run

Bu örnekte kullanılan betik hakkında dataprep.py bilgiler de dahil olmak üzere daha fazla bilgi için örnek not defterine bakın.

Verilerinizi hazırladıktan sonra, eğitim işleriniz için giriş olarak kullanabilirsiniz. Yukarıdaki kod örneğinde, eğitim işleri için giriş verileriniz olarak öğesini belirtebilirsiniz registered_dataset .

Örnek not defterleri

Azure Synapse Analytics ve Azure Machine Learning tümleştirme özellikleri hakkında daha fazla kavram ve tanıtım için bu örnek not defterlerini gözden geçirin:

Sonraki adımlar