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
Geliştirme ortamınızı Azure Machine Learning SDK'sını yükleyecek şekilde yapılandırın veya SDK zaten yüklü bir Azure Machine Learning işlem örneği kullanın
Azure Machine Learning Python SDK'sını yükleme
Azure portalını, web araçlarını veya Synapse Studio'yu kullanarak Apache Spark havuzu oluşturma
azureml-synapse
Paketi (önizleme) şu kodla yükleyin:pip install azureml-synapse
Azure Machine Learning çalışma alanınızı ve Azure Synapse Analytics çalışma alanınızı Azure Machine Learning Python SDK'sıyla veya Azure Machine Learning stüdyosu
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.
Ö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.
%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:
Hadoop Dağıtılmış Dosyalar Sistemi (HDFS) yolu ile depolamadan verileri doğrudan yükleme
Mevcut bir Azure Machine Learning veri kümesindeki verileri okuma
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ındanws
alır. - Dizininde
mydatastore
training_data
bulunan hazırlanmış veri dosyalarına başvurmak için bir FileDataset,train_ds
oluşturur. - değişkeni
input1
oluşturur. Daha sonra bu değişken, veri kümesinintrain_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_ds
dosyasından değişkeninput2
oluşturur - sınıfıyla
HDFSOutputDatasetConfiguration
değişkenoutput
oluşturur. Çalıştırma tamamlandıktan sonra bu sınıf, çalıştırmanın çıkışını veri kümesitest
olarak veri deposunamydatastore
kaydetmemize olanak tanır. Azure Machine Learning çalışma alanında veritest
kümesi adı altında kaydedilirregistered_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:
- Azure Machine Learning çalışma alanınızdaki bir not defterinden etkileşimli bir Spark oturumu çalıştırın.
- İşlem hedefiniz olarak Synapse Spark havuzuyla bir Azure Machine Learning denemesi çalıştırması gönderin.