Oktatóanyag: Nagyméretű adatok indexelése az Apache Sparkból a SynapseML és az Azure AI Keresés használatával

Megjegyzés

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

Ebben az Azure AI Keresés oktatóanyagban megtudhatja, hogyan indexelheti és kérdezheti le a nagy adatokat, amelyeket egy Spark-fürtől töltöttek be. Beállítasz egy Jupyter Notebookot a következő célokra:

  • Különböző űrlapok (számlák) betöltése adatkeretbe egy Apache Spark-munkamenetben
  • Az űrlapok elemzése a funkciók meghatározásához
  • Az eredményül kapott kimenet összeállítása táblázatos adatstruktúrába
  • A kimenet írása az Azure AI Keresésben üzemeltetett keresési indexbe
  • A létrehozott tartalom megismerése és lekérdezése

Ez az oktatóanyag a SynapseML-hez való függőséget veszi igénybe, amely egy nyílt forráskódú kódtár, amely nagy mennyiségű adaton keresztül támogatja a nagymértékben párhuzamos gépi tanulást. A SynapseML-ben a keresési indexelés és a gépi tanulás speciális feladatokat végző transzformátorokon keresztül érhető el. A transformerek az AI-képességek széles skáláját kiaknázzák. Ebben a gyakorlatban az AzureSearchWriter API-kat használja elemzéshez és AI-bővítéshez.

Bár az Azure AI Keresés natív AI-bővítéssel rendelkezik, ez az oktatóanyag bemutatja, hogyan férhet hozzá az AI-képességekhez az Azure AI Keresésen kívül. Ha a SynapseML-t használja indexelők vagy készségek helyett, nem vonatkoznak önre adatkorlátok vagy az objektumokkal kapcsolatos egyéb korlátozások.

Tipp

Tekintse meg a bemutató rövid videóját. A videó további lépésekkel és vizualizációkkal bővíti ezt az oktatóanyagot.

Prerequisites

Szüksége van a kódtárra synapseml és több Azure-erőforrásra. Ha lehetséges, használja ugyanazt az előfizetést és régiót az Azure-erőforrásokhoz, és helyezzen el mindent egy erőforráscsoportba az egyszerű törlés érdekében. Az alábbi hivatkozások a portál telepítésére mutatnak. A mintaadatok importálása nyilvános helyről történik.

1 Ez a hivatkozás a csomag betöltési útmutatóhoz vezet.

2 Az ingyenes szinttel indexelheti a mintaadatokat, de nagyobb adatmennyiségek esetén magasabb szintet is választhat . Számlázható szintek esetén adja meg a keresési API-kulcsot a Függőségek beállítása lépés későbbi szakaszában.

3 Ez az oktatóanyag a Foundry Tools Dokumentumintelligencia és Translator szolgáltatását használja. A következő utasításokban adjon meg egy Foundry-erőforráskulcsot a régióval együtt. Ugyanez a kulcs mindkét szolgáltatás esetében működik. Ebben az oktatóanyagban fontos, hogy egy Foundry-erőforrást használjon API-val AIServices. Az API-típust az Azure Portalon, az Foundry-erőforrás Áttekintés lapján ellenőrizheti. További információ az API-típusról: Foundry-erőforrás csatolása az Azure AI Keresésben.

4 Ebben az oktatóanyagban az Azure Databricks biztosítja a Spark számítási platformot. A portál utasításait használva beállítottuk a fürtöt és a munkaterületet.

Megjegyzés

A fenti Azure-erőforrások támogatják a Microsoft Identity platform biztonsági funkcióit. Az egyszerűség kedvéért ez az oktatóanyag kulcsalapú hitelesítést feltételez az egyes szolgáltatások Azure Portal-oldalairól másolt végpontok és kulcsok használatával. Ha éles környezetben implementálja ezt a munkafolyamatot, vagy megosztja a megoldást másokkal, ne felejtse el lecserélni a rögzített kulcsokat integrált biztonsági vagy titkosított kulcsokkal.

Hozzon létre Spark-fürtöt és jegyzetfüzetet.

Ebben a szakaszban létrehoz egy fürtöt, telepíti a synapseml könyvtárat, és jegyzetfüzetet hoz létre a kód futtatásához.

  1. Az Azure Portalon keresse meg az Azure Databricks-munkaterületet, és válassza a Munkaterület indítása lehetőséget.

  2. A bal oldali menüben válassza a Számítás lehetőséget.

  3. Válassza a Számítás létrehozása lehetőséget.

  4. Fogadja el az alapértelmezett konfigurációt. A fürt létrehozása több percet vesz igénybe.

  5. Ellenőrizze, hogy a klaszter működik-e és fut-e. A fürtnév által megadott zöld pont megerősíti az állapotát.

    Képernyőkép egy Databricks feldolgozási oldalról, amelyen a fürt neve mellett egy zöld pont látható.

  6. A fürt létrehozása után telepítse a synapseml könyvtárat:

    1. Válassza a Könyvtárak lehetőséget a fürt lapjának tetején található lapok közül.

    2. Válassza az Új telepítése lehetőséget.

      Képernyőkép az Új telepítés parancsról.

    3. Válassza a Maven lehetőséget.

    4. A Koordináták területen keresse meg a következőt com.microsoft.azure:synapseml_2.12:1.0.9: .

    5. Válassza a Telepítéslehetőséget.

      Képernyőkép a Maven-csomag specifikációról.

  7. A bal oldali menüben válassza aJegyzetfüzet>.

    Képernyőkép a Jegyzetfüzet létrehozása parancsról.

  8. Adjon nevet a jegyzetfüzetnek, válassza a Pythont alapértelmezett nyelvként, és válassza ki a könyvtárat tartalmazó fürtöt synapseml.

  9. Hozzon létre hét egymást követő cellát. A következő szakaszokban kódot illeszt be ezekbe a cellákba.

    Képernyőkép a helyőrző cellákkal rendelkező jegyzetfüzetről.

Függőségek beállítása

Illessze be a következő kódot a jegyzetfüzet első cellájába.

Cserélje le a helyőrzőket végpontokra és hozzáférési kulcsokra az egyes erőforrásokhoz. Adja meg a létrehozandó új keresési index nevét. Nincs szükség további módosításokra, ezért futtassa a kódot, amikor készen áll.

Ez a kód több csomagot importál, és beállítja az oktatóanyagban használt Azure-erőforrásokhoz való hozzáférést.

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-foundry-key"
cognitive_services_region = "placeholder-azure-ai-foundry-region"

search_service = "placeholder-search-service-name"
search_key = "placeholder-search-service-admin-api-key"
search_index = "placeholder-for-new-search-index-name"

Adatok betöltése a Sparkba

Illessze be a következő kódot a második cellába. Nincs szükség módosításokra, ezért futtassa a kódot, amikor készen áll.

Ez a kód betölt néhány külső fájlt egy Azure Storage-fiókból. A fájlok különböző számlák, amelyek adattáblába vannak olvasva.

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://[email protected]/form_subset/*")
    .select("path")
    .limit(10)
    .select(udf(blob_to_url, StringType())("path").alias("url"))
    .cache())
    
display(df2)

Dokumentumintelligencia funkció hozzáadása

Illessze be a következő kódot a harmadik cellába. Nincs szükség módosításokra, ezért futtassa a kódot, amikor készen áll.

Ez a kód betölti az AnalyzeInvoices transzformátort , és átadja a számlákat tartalmazó adatkeretre mutató hivatkozást. Meghívja az Azure Document Intelligence előre összeállított számlamodellét az Foundry Toolsban, hogy adatokat nyerjen ki a számlákból.

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)

A kimenetnek az alábbi képernyőképhez hasonlóan kell kinéznie. Figyelje meg, hogy az űrlapelemzés egy sűrűn strukturált oszlopba van csomagolva, amellyel nehéz dolgozni. A következő átalakítás úgy oldja meg ezt a problémát, hogy az oszlopot sorokra és oszlopokra bontja.

Képernyőkép az AnalyzeInvoices kimenetéről.

Dokumentum-intelligencia-kimenet átstrukturálása

Illessze be a következő kódot a negyedik cellába, és futtassa. Nincs szükség módosításra.

Ez a kód betölti a FormOntologyLearner nevű transzformátort, amely elemzi az Azure Document Intelligence-transzformátorok kimenetét, és táblázatos adatstruktúrára következtet. Az AnalyzeInvoices kimenete dinamikus, és a tartalomban észlelt funkcióktól függően változik. Ezenkívül a transzformátor egyetlen oszlopba összesíti a kimenetet. Mivel a kimenet dinamikus és konszolidált, nehéz olyan alárendelt átalakításokban használni, amelyek több struktúrát igényelnek.

A FormOntologyLearner kibővíti az AnalyzeInvoices transzformátor segédprogramját, és olyan mintákat keres, amelyek táblázatos adatstruktúra létrehozásához használhatók. Ha a kimenetet több oszlopba és sorba rendezi, a tartalom más átalakítókban, például az AzureSearchWriterben is hasznosíthatóvá válik.

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)

Figyelje meg, hogy ez az átalakítás hogyan alakítja át a beágyazott mezőket egy táblába, amely lehetővé teszi a következő két átalakítást. Ez a képernyőkép a rövidség kedvéért van levágva. Ha a saját jegyzetfüzetében dolgozik, 19 oszlopot és 26 sort lát.

Képernyőkép a FormOntologyLearner kimenetéről.

Fordítások hozzáadása

Illessze be az alábbi kódot az ötödik cellába. Nincs szükség módosításokra, ezért futtassa a kódot, amikor készen áll.

Ez a kód betölti a Translate nevű transzformátort, amely meghívja az Azure Translatort az Foundry Toolsban. Az eredeti szöveg, amely angolul a "Leírás" oszlopban található, gépi fordításban különböző nyelvekre van lefordítva. Az összes kimenet a "output.translations" tömbbe van összesítve.

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)

Tipp

A lefordított karakterláncok kereséséhez görgesse le a sorok végéhez.

Képernyőkép a táblázat kimenetéről, amelyen a Fordítások oszlop látható.

Keresési index hozzáadása az AzureSearchWriter használatával

Illessze be a következő kódot a hatodik cellába, és futtassa. Nincs szükség módosításra.

Ez a kód betölti az AzureSearchWritert. Táblázatos adatkészletet használ fel, és egy keresési index sémájára következtet, amely minden oszlophoz egy mezőt határoz meg. Mivel a fordítási struktúra egy tömb, az index összetett gyűjteményként van tagolt, almezőkkel az egyes nyelvi fordításokhoz. A létrehozott index rendelkezik egy dokumentumkulccsal, és az Index REST API-val létrehozott mezők alapértelmezett értékeit használja.

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",
    ))

Az AzureSearchWriter által létrehozott indexdefiníció megismeréséhez tekintse meg a keresési szolgáltatás lapjait az Azure Portalon.

Megjegyzés

Ha nem tudja használni az alapértelmezett keresési indexet, megadhat egy külső egyéni definíciót a JSON-ban, és az URI-t sztringként adja át az "indexJson" tulajdonságban. Először hozza létre az alapértelmezett indexet, hogy tudja, mely mezőket kell megadnia, majd kövesse a testreszabott tulajdonságokat, ha konkrét elemzőkre van szüksége, például.

Az index lekérdezése

Illessze be a következő kódot a hetedik cellába, és futtassa. Nincs szükség módosításra, kivéve, ha módosítani szeretné a szintaxist, vagy további példákat szeretne kipróbálni a tartalom további megismeréséhez:

Nincs olyan transzformátor vagy modul, amely lekérdezéseket ad ki. Ez a cella a Search Documents REST API egyszerű hívása.

Ez a példa az "ajtó" ("search": "door") szót keresi. Az egyező dokumentumok számának "számát" is visszaadja, és csak a "Leírás" és a "Fordítások" mezők tartalmát választja ki az eredményekhez. Ha meg szeretné jeleníteni a mezők teljes listáját, távolítsa el a "select" paramétert.

import requests

url = "https://{}.search.windows.net/indexes/{}/docs/search?api-version=2026-04-01".format(search_service, search_index)
requests.post(url, json={"search": "door", "count": "true", "select": "Description, Translations"}, headers={"api-key": search_key}).json()

Az alábbi képernyőképen a mintaszkript cellakimenete látható.

Képernyőkép a lekérdezés eredményeiről a darabszám, a keresési sztring és a visszatérési mezők megjelenítésével.

Erőforrások tisztítása

Ha a saját előfizetésedben dolgozol, a projekt végén célszerű eltávolítani azokat az erőforrásokat, amelyekre már nincs szükséged. A továbbra is futó erőforrások pénzbe kerülhetnek. Az erőforrásokat törölheti egyesével, vagy az erőforráscsoport törlésével eltávolíthatja a benne lévő összes erőforrást is.

Az erőforrásokat az Azure Portalon, a bal oldali navigációs panel Minden erőforrás vagy erőforráscsoport hivatkozásával keresheti meg és kezelheti.

Következő lépések

Ebben az oktatóanyagban megismerkedett az AzureSearchWriter transzformátorsal a SynapseML-ben, amely új módszer a keresési indexek Azure AI Keresésben való létrehozására és betöltésére. A transzformátor bemenetként strukturált JSON-t használ. A FormOntologyLearner biztosítja a SynapseML-ben az Azure Document Intelligence transzformátorok által előállított kimenethez szükséges struktúrát.

Következő lépésként tekintse át a SynapseML egyéb oktatóanyagait, amelyek átalakított tartalmakat hoznak létre, amelyeket érdemes lehet megvizsgálni az Azure AI Keresés használatával: