Öğretici: SynapseML ve Azure AI Search kullanarak Apache Spark'tan büyük verileri dizine ekleme
Bu Azure AI Search öğreticisinde Spark kümesinden yüklenen büyük verileri dizine almayı ve sorgulamayı öğrenin. Aşağıdaki eylemleri gerçekleştiren bir Jupyter Not Defteri ayarlayın:
- Apache Spark oturumunda veri çerçevesine çeşitli formlar (faturalar) yükleme
- Özelliklerini belirlemek için bunları analiz etme
- Sonuçta elde edilen çıkışı tablosal veri yapısında bir araya getirme
- Çıktıyı Azure AI Search'te barındırılan bir arama dizinine yazma
- Oluşturduğunuz içeriği keşfetme ve sorgulama
Bu öğretici, büyük veriler üzerinde yüksek düzeyde paralel makine öğrenmesini destekleyen bir açık kaynak kitaplığı olan SynapseML bağımlılığını alır. SynapseML'de arama dizini oluşturma ve makine öğrenmesi, özel görevler gerçekleştiren transformatörler aracılığıyla kullanıma sunulur. Transformatörler çok çeşitli yapay zeka özelliklerine sahiptir. Bu alıştırmada analiz ve yapay zeka zenginleştirmesi için AzureSearchWriter API'lerini kullanın.
Azure AI Search'ün yerel yapay zeka zenginleştirmesi olsa da bu öğreticide, Azure AI Search dışında yapay zeka özelliklerine nasıl erişabileceğiniz gösterilmektedir. Dizin oluşturucular veya beceriler yerine SynapseML kullanarak veri sınırlarına veya bu nesnelerle ilişkili diğer kısıtlamalara tabi olmazsınız.
İpucu
adresinde bu tanıtımın https://www.youtube.com/watch?v=iXnBLwp7f88kısa bir videosunu izleyin. Video, daha fazla adım ve görselle bu öğreticide genişler.
Önkoşullar
Kitaplığa synapseml
ve birkaç Azure kaynağına ihtiyacınız vardır. Mümkünse, Azure kaynaklarınız için aynı aboneliği ve bölgeyi kullanın ve daha sonra basit temizleme için her şeyi tek bir kaynak grubuna yerleştirin. Aşağıdaki bağlantılar portal yüklemelerine yöneliktir. Örnek veriler genel bir siteden içeri aktarılır.
- SynapseML paket1
-
API Türü 2 olan Azure AI Search (herhangi bir katman)
AIServices
- Azure AI çoklu hizmet hesabı (herhangi bir katman) 3
- Apache Spark 3.3.0 çalışma zamanı4 ile Azure Databricks (herhangi bir katman)
1 Bu bağlantı, paketi yüklemeye yönelik bir öğreticiye çözümleniyor.
2 Örnek verilerin dizinini oluşturmak için ücretsiz arama katmanını kullanabilirsiniz, ancak veri hacimleriniz büyükse daha yüksek bir katman seçebilirsiniz. Faturalanabilir katmanlar için bağımlılıkları ayarlama adımında daha sonra arama API'si anahtarını sağlayın.
3 Bu öğreticide Azure AI Belge Zekası ve Azure AI Translator kullanılır. Aşağıdaki yönergelerde, bir çok hizmetli hesap anahtarı ve bölge sağlayın. Aynı anahtar her iki hizmet için de çalışır.
Bu öğretici için API türünde AIServices
bir Azure AI çok hizmetli hesabı kullanmanız önemlidir. API türünü Azure portalında Azure yapay zeka çok hizmetli hesap sayfanızın Genel Bakış bölümünden de kontrol edebilirsiniz. API türü hakkında daha fazla bilgi için bkz . Azure AI Search'te Azure AI çoklu hizmet kaynağı ekleme.
4 Bu öğreticide, Azure Databricks Spark bilgi işlem platformunu sağlar. Kümeyi ve çalışma alanını ayarlamak için portal yönergelerini kullandık.
Not
Yukarıdaki Azure kaynaklarının tümü Microsoft Identity platformundaki güvenlik özelliklerini destekler. Kolaylık olması için bu öğreticide, her hizmetin Azure portalı sayfalarından kopyalanan uç noktaları ve anahtarları kullanarak anahtar tabanlı kimlik doğrulaması varsayılır. Bu iş akışını bir üretim ortamında uygularsanız veya çözümü başkalarıyla paylaşırsanız, sabit kodlanmış anahtarları tümleşik güvenlik veya şifrelenmiş anahtarlarla değiştirmeyi unutmayın.
1. Adım: Spark kümesi ve not defteri oluşturma
Bu bölümde bir küme oluşturun, kitaplığı yükleyin synapseml
ve kodu çalıştırmak için bir not defteri oluşturun.
Azure portalında Azure Databricks çalışma alanınızı bulun ve Çalışma alanını başlat'ı seçin.
Soldaki menüde İşlem'i seçin.
İşlem oluştur'u seçin.
Varsayılan yapılandırmayı kabul edin. Kümenin oluşturulması birkaç dakika sürer.
Kümenin çalışır durumda olduğunu ve çalıştığını doğrulayın. Küme adında yeşil bir nokta durumunu onaylar.
synapseml
Küme oluşturulduktan sonra kitaplığı yükleyin:Küme sayfasının üst kısmındaki sekmelerden Kitaplıklar'ı seçin.
Yeni yükle'yi seçin.
Maven'ı seçin.
Koordinatlar'da arama veya yazma
com.microsoft.azure:synapseml_2.12:1.0.9
Yükle'yi seçin.
Soldaki menüde Not Defteri Oluştur'u>seçin.
Not defterine bir ad verin, varsayılan dil olarak Python'ı seçin ve kitaplığı olan kümeyi
synapseml
seçin.Ardışık yedi hücre oluşturun. Aşağıdaki bölümlerde kodu yapıştırmak için bunları kullanırsınız.
2. Adım: Bağımlılıkları ayarlama
Aşağıdaki kodu not defterinizin ilk hücresine yapıştırın.
Yer tutucuları her kaynağın uç noktaları ve erişim anahtarlarıyla değiştirin. Sizin için oluşturulan yeni bir arama dizini için bir ad sağlayın. Başka değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.
Bu kod birden çok paketi içeri aktarır ve bu iş akışında kullanılan Azure kaynaklarına erişimi ayarlar.
import os
from pyspark.sql.functions import udf, trim, split, explode, col, monotonically_increasing_id, lit
from pyspark.sql.types import StringType
from synapse.ml.core.spark import FluentAPI
cognitive_services_key = "placeholder-azure-ai-services-multi-service-key"
cognitive_services_region = "placeholder-azure-ai-services-region"
search_service = "placeholder-search-service-name"
search_key = "placeholder-search-service-admin-api-key"
search_index = "placeholder-for-new-search-index-name"
3. Adım: Spark'a veri yükleme
Aşağıdaki kodu ikinci hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.
Bu kod bir Azure depolama hesabından birkaç dış dosya yükler. Dosyalar çeşitli faturalardır ve bir veri çerçevesinde okunur.
def blob_to_url(blob):
[prefix, postfix] = blob.split("@")
container = prefix.split("/")[-1]
split_postfix = postfix.split("/")
account = split_postfix[0]
filepath = "/".join(split_postfix[1:])
return "https://{}/{}/{}".format(account, container, filepath)
df2 = (spark.read.format("binaryFile")
.load("wasbs://publicwasb@mmlspark.blob.core.windows.net/form_subset/*")
.select("path")
.limit(10)
.select(udf(blob_to_url, StringType())("path").alias("url"))
.cache())
display(df2)
4. Adım: Belge zekası ekleme
Aşağıdaki kodu üçüncü hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.
Bu kod AnalyzeInvoices transformatörunu yükler ve faturaları içeren veri çerçevesine bir başvuru geçirir. Faturalardan bilgi ayıklamak için Azure AI Belge Zekası'nın önceden oluşturulmuş fatura modelini çağırır.
from synapse.ml.services import AnalyzeInvoices
analyzed_df = (AnalyzeInvoices()
.setSubscriptionKey(cognitive_services_key)
.setLocation(cognitive_services_region)
.setImageUrlCol("url")
.setOutputCol("invoices")
.setErrorCol("errors")
.setConcurrency(5)
.transform(df2)
.cache())
display(analyzed_df)
Bu adımın çıktısı bir sonraki ekran görüntüsüne benzer görünmelidir. Form analizinin yoğun yapılandırılmış bir sütuna nasıl paketlendiğine ve bu sütunla çalışmanın zor olduğuna dikkat edin. Sonraki dönüştürme, sütunu satırlara ve sütunlara ayrıştırarak bu sorunu çözer.
5. Adım: Belge zekası çıkışını yeniden yapılandırma
Aşağıdaki kodu dördüncü hücreye yapıştırın ve çalıştırın. Değişiklik gerekmez.
Bu kod, Belge Zekası transformatörlerinin çıkışını analiz eden ve tablosal bir veri yapısı çıkaran bir transformatör olan FormOntologyLearner'ı yükler. AnalyzeInvoices'un çıkışı dinamiktir ve içeriğinizde algılanan özelliklere göre değişir. Ayrıca transformatör çıkışı tek bir sütunda birleştirir. Çıkış dinamik olduğundan ve birleştirildiğinden, daha fazla yapı gerektiren aşağı akış dönüşümlerinde kullanmak zordur.
FormOntologyLearner, tablosal veri yapısı oluşturmak için kullanılabilecek desenleri arayarak AnalyzeInvoices transformatörünün yardımcı programını genişletir. Çıkışı birden çok sütun ve satır halinde düzenlemek, içeriği AzureSearchWriter gibi diğer dönüştürücülerde kullanılabilir hale getirir.
from synapse.ml.cognitive import FormOntologyLearner
itemized_df = (FormOntologyLearner()
.setInputCol("invoices")
.setOutputCol("extracted")
.fit(analyzed_df)
.transform(analyzed_df)
.select("url", "extracted.*").select("*", explode(col("Items")).alias("Item"))
.drop("Items").select("Item.*", "*").drop("Item"))
display(itemized_df)
Bu dönüşümün iç içe alanları bir tabloya nasıl yeniden yayınladığına ve bu sayede sonraki iki dönüştürmenin nasıl etkinleştirildiğine dikkat edin. Bu ekran görüntüsü kısa olması için kırpılmıştır. Kendi not defterinizde takip ediyorsanız 19 sütun ve 26 satırınız vardır.
6. Adım: Çeviri ekleme
Aşağıdaki kodu beşinci hücreye yapıştırın. Değişiklik gerekmez, bu nedenle hazır olduğunuzda kodu çalıştırın.
Bu kod, Azure AI hizmetlerinde Azure AI Translator hizmetini çağıran çeviri dönüştürücü olan Translate'i yükler. "Açıklama" sütununda İngilizce olan özgün metin, makine tarafından çeşitli dillere çevrilmiştir. Tüm çıkışlar "output.translations" dizisinde birleştirilir.
from synapse.ml.cognitive import Translate
translated_df = (Translate()
.setSubscriptionKey(cognitive_services_key)
.setLocation(cognitive_services_region)
.setTextCol("Description")
.setErrorCol("TranslationError")
.setOutputCol("output")
.setToLanguage(["zh-Hans", "fr", "ru", "cy"])
.setConcurrency(5)
.transform(itemized_df)
.withColumn("Translations", col("output.translations")[0])
.drop("output", "TranslationError")
.cache())
display(translated_df)
İpucu
Çevrilmiş dizeleri denetlemek için satırların sonuna kaydırın.
7. Adım: AzureSearchWriter ile arama dizini ekleme
Aşağıdaki kodu altıncı hücreye yapıştırın ve çalıştırın. Değişiklik gerekmez.
Bu kod AzureSearchWriter yükler. Tablosal bir veri kümesi tüketir ve her sütun için bir alan tanımlayan bir arama dizini şeması çıkartır. Çeviri yapısı bir dizi olduğundan, dizinde her dil çevirisi için alt alanları olan karmaşık bir koleksiyon olarak ifade edilir. Oluşturulan dizinin bir belge anahtarı vardır ve Dizin Oluşturma REST API'sini kullanarak oluşturulan alanlar için varsayılan değerleri kullanır.
from synapse.ml.cognitive import *
(translated_df.withColumn("DocID", monotonically_increasing_id().cast("string"))
.withColumn("SearchAction", lit("upload"))
.writeToAzureSearch(
subscriptionKey=search_key,
actionCol="SearchAction",
serviceName=search_service,
indexName=search_index,
keyCol="DocID",
))
Azure Portal'da arama hizmeti sayfalarını denetleyerek AzureSearchWriter tarafından oluşturulan dizin tanımını inceleyebilirsiniz.
Not
Varsayılan arama dizinini kullanamıyorsanız, JSON'da bir dış özel tanım sağlayabilir ve URI'sini "indexJson" özelliğine dize olarak geçirebilirsiniz. Hangi alanların belirtileceğini bilmeniz için önce varsayılan dizini oluşturun ve ardından örneğin belirli çözümleyicilere ihtiyacınız varsa özelleştirilmiş özelliklerle izleyin.
8. Adım: Dizini sorgulama
Aşağıdaki kodu yedinci hücreye yapıştırın ve çalıştırın. söz dizimini değiştirmek veya içeriğinizi daha fazla incelemek için daha fazla örnek denemek istemeniz dışında değişiklik gerekmez:
Sorgular veren transformatör veya modül yoktur. Bu hücre, Belge Ara REST API'sine yapılan basit bir çağrıdır.
Bu özel örnek, "door" ("search": "door"
) sözcüğünü aramaktır. Ayrıca eşleşen belge sayısının "sayısını" döndürür ve sonuçlar için yalnızca "Açıklama" ve "Çeviriler" alanlarının içeriğini seçer. Alanların tam listesini görmek istiyorsanız "select" parametresini kaldırın.
import requests
url = "https://{}.search.windows.net/indexes/{}/docs/search?api-version=2024-07-01".format(search_service, search_index)
requests.post(url, json={"search": "door", "count": "true", "select": "Description, Translations"}, headers={"api-key": search_key}).json()
Aşağıdaki ekran görüntüsünde örnek betiğin hücre çıkışı gösterilmektedir.
Kaynakları temizleme
Kendi aboneliğinizde çalışırken, bir projenin sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar maliyetlerin artmasına neden olabilir. Kaynakları teker teker silebilir veya tüm kaynak grubunu silerek kaynak kümesinin tamamını kaldırabilirsiniz.
Sol gezinti bölmesindeki Tüm kaynaklar veya Kaynak grupları bağlantısını kullanarak Kaynakları Azure portalında bulabilir ve yönetebilirsiniz.
Sonraki adımlar
Bu öğreticide, Azure AI Search'te arama dizinleri oluşturmanın ve yüklemenin yeni bir yolu olan SynapseML'deki AzureSearchWriter transformatörü hakkında bilgi edindiniz. Transformatör, yapılandırılmış JSON'ı giriş olarak alır. FormOntologyLearner, SynapseML'deki Belge Zekası transformatörleri tarafından üretilen çıktı için gerekli yapıyı sağlayabilir.
Sonraki adım olarak, Azure AI Search aracılığıyla keşfetmek isteyebileceğiniz dönüştürülmüş içerik üreten diğer SynapseML öğreticilerini gözden geçirin: