Presentazione del connettore Databricks, una soluzione chiara per semplificare la migrazione e la trasformazione dei dati non strutturati
Con la rapida evoluzione delle tecnologie di AI e machine learning (AI/ML), i vector embeddings sono diventati il metodo di riferimento per indicizzare dati non strutturati ed effettuare ricerche semantiche.
La ricerca basata sull’AI comprende tipicamente due fasi distinte: indicizzazione offline dei dati e gestione online delle query, che richiedono l’utilizzo di stack tecnologici diversi. Tuttavia, tentare di trasferire in modo efficiente i dati dallo stack di elaborazione offline allo stack di serving online senza soluzione di continuità può essere impegnativo. La release più recente di Zilliz Cloud introduce un Databricks Connector, una soluzione chiara per semplificare questo processo integrando Apache Spark/Databricks e Milvus/Zilliz Cloud.
In questo post presenteremo questa integrazione, esploreremo il suo utilizzo pratico in scenari reali e ti guideremo su come usarla.
Come funziona il Databricks Connector e i suoi casi d’uso
Spark è rinomato per la sua capacità di elaborare dati su larga scala e per la sua competenza nel machine learning. D’altra parte, Milvus eccelle nella gestione e nella ricerca efficiente di vector embeddings generati da modelli di machine learning. Combinare queste due potenti tecnologie facilita lo sviluppo di applicazioni all’avanguardia in ambiti come la Generative AI, i recommendation systems e la ricerca di immagini e video.
Trasferire dati da Spark a Milvus è un’attività comune nella creazione di ricerche basate sull’AI, ma spesso comporta complesso glue code nel backend del sistema di ricerca. Il connector Spark-Milvus semplifica questo processo, condensandolo in una singola chiamata di funzione all’interno del programma Spark.
Questo connector si rivela utile in vari scenari.
Importazione batch dei dati
I team con competenze di machine learning aggiornano spesso i propri modelli di embedding per incorporare i risultati più recenti della ricerca. Dopo ogni aggiornamento del modello di embedding, che richiede che l’intero corpus di dati venga rielaborato dal job Spark e venga generato un nuovo set di vettori, i team hanno spesso bisogno di 'glue code' personalizzato, di un servizio dedicato o di un altro job Spark per integrare questi nuovi vettori nello stack di serving. Tuttavia, con il Databricks Connector, questa attività diventa semplice quanto concedere al job l’accesso in scrittura al bucket S3 di Milvus (o a un bucket effimero quando si utilizza Zilliz Cloud). Questo processo semplificato consente al job Spark che genera vettori di caricare i dati direttamente nell’istanza Milvus tramite una semplice chiamata a una funzione di utilità.
Inserimento iterativo
Anche gli utenti che non operano su larga scala possono trarre vantaggio dall’inserimento diretto dei record di Spark DataFrame in Milvus utilizzando il connector Spark-Milvus. Questo approccio evita lo sforzo di scrivere codice per stabilire la connessione e chiamate API, rendendo il processo di integrazione più fluido.
Come usare il Databricks Connector
Questa sezione mostra come utilizzare il Databricks Connector per semplificare la migrazione e la trasformazione dei dati.
Inserimento iterativo di uno Spark Dataframe
Con la connessione Spark-Milvus, lo streaming di dati da Spark a Milvus non è mai stato così facile. Ora puoi inviare direttamente dati da Spark a Milvus con l’API Dataframe nativa di Spark. Lo stesso codice funziona anche per Databricks e Zilliz (Milvus completamente gestito). Ecco uno snippet di codice che dimostra questo approccio:
// Specify the target Milvus instance and vector data collection
df.write.format("milvus")
.option(MILVUS_URI, "https://in01-xxxxxxxxx.aws-us-west-2.vectordb.zillizcloud.com:19535")
.option(MILVUS_TOKEN, dbutils.secrets.get(scope = "zillizcloud", key = "token"))
.option(MILVUS_COLLECTION_NAME, "text_embedding")
.option(MILVUS_COLLECTION_VECTOR_FIELD, "embedding")
.option(MILVUS_COLLECTION_VECTOR_DIM, "128")
.option(MILVUS_COLLECTION_PRIMARY_KEY, "id")
.mode(SaveMode.Append)
.save()
Caricamento batch di una raccolta
Consigliamo di utilizzare la funzione `MilvusUtils. bulkInsertFromSpark ()` per le situazioni in cui è necessario trasferire grandi volumi di dati in modo efficiente. Questo approccio è estremamente efficiente per gestire dataset enormi.
Approccio per Milvus
L'integrazione prevede bucket S3 o MinIO per le istanze Milvus self-hosted come storage interno. Concedendo l'accesso a Spark o Databricks, il job Spark può utilizzare i connettori Milvus per scrivere dati nel bucket in batch e quindi inserire in blocco l'intera raccolta per la distribuzione.
// Write the data in batch into the Milvus bucket storage.
val outputPath = "s3a://milvus-bucket/result"
df.write
.mode("overwrite")
.format("parquet")
.save(outputPath)
// Specify Milvus options.
val targetProperties = Map(
MilvusOptions.MILVUS_HOST -> host,
MilvusOptions.MILVUS_PORT -> port.toString,
MilvusOptions.MILVUS_COLLECTION_NAME -> targetCollectionName,
MilvusOptions.MILVUS_BUCKET -> bucketName,
MilvusOptions.MILVUS_ROOTPATH -> rootPath,
MilvusOptions.MILVUS_FS -> fs,
MilvusOptions.MILVUS_STORAGE_ENDPOINT -> minioEndpoint,
MilvusOptions.MILVUS_STORAGE_USER -> minioAK,
MilvusOptions.MILVUS_STORAGE_PASSWORD -> minioSK,
)
val targetMilvusOptions = new MilvusOptions(new CaseInsensitiveStringMap(targetProperties.asJava))
// Bulk insert Spark output files into Milvus
MilvusUtils.bulkInsertFromSpark(spark, targetMilvusOptions, outputPath, "parquet")
Un approccio per Zilliz Cloud
Se utilizzi Zilliz Cloud (il Milvus gestito), puoi sfruttare la sua comoda Data Import API. Zilliz Cloud fornisce strumenti e documentazione completi per aiutarti a spostare in modo efficiente i tuoi dati da varie origini dati, incluso Spark. Configurando un bucket S3 come intermediario e concedendo l'accesso a Zilliz Cloud, la Data Import API carica senza problemi i dati dal bucket S3 al database vettoriale.
Prima di eseguire questa integrazione, devi caricare il runtime Spark aggiungendo un file jar al cluster Databricks. Esistono diversi modi per installare una libreria. Lo screenshot seguente mostra il caricamento di un jar da locale al cluster.
Per maggiori dettagli sull'installazione di una libreria nell'area di lavoro Databricks, consulta la documentazione ufficiale di Databricks per saperne di più.
L'inserimento in blocco richiede l'archiviazione dei dati in un bucket temporaneo, in modo che Zilliz Cloud possa importarli in batch. Puoi creare un bucket S3 e configurarlo come posizione esterna di Databricks. Consulta questa documentazione per i dettagli. Per ridurre il rischio di sicurezza delle tue credenziali Zilliz Cloud, puoi gestirle in modo sicuro su Databricks seguendo le istruzioni di Databricks.
Ecco un frammento di codice che illustra il processo di migrazione dei dati in batch. Analogamente all'esempio Milvus sopra, devi solo sostituire le credenziali e l'indirizzo del bucket S3.
// Scrivi i dati in batch nello storage bucket Milvus.
val outputPath = "s3://my-temp-bucket/result"
df.write
.mode("overwrite")
.format("mjson")
.save(outputPath)
// Specifica le opzioni Milvus.
val targetProperties = Map(
MilvusOptions.MILVUS_URI -> zilliz_uri,
MilvusOptions.MILVUS_TOKEN -> zilliz_token,
MilvusOptions.MILVUS_COLLECTION_NAME -> targetCollectionName,
MilvusOptions.MILVUS_BUCKET -> bucketName,
MilvusOptions.MILVUS_ROOTPATH -> rootPath,
MilvusOptions.MILVUS_FS -> fs,
MilvusOptions.MILVUS_STORAGE_ENDPOINT -> minioEndpoint,
MilvusOptions.MILVUS_STORAGE_USER -> minioAK,
MilvusOptions.MILVUS_STORAGE_PASSWORD -> minioSK,
)
val targetMilvusOptions = new MilvusOptions(new CaseInsensitiveStringMap(targetProperties.asJava))
// Inserisci in blocco i file di output Spark in Milvus
MilvusUtils.bulkInsertFromSpark(spark, targetMilvusOptions, outputPath, "mjson")
Mettere tutto insieme: un esempio di notebook che ti guida attraverso l'intero processo
Per aiutarti a iniziare rapidamente, abbiamo preparato un esempio di notebook che ti guida attraverso i processi di trasferimento dati in streaming e batch con Milvus e Zilliz Cloud.
Conclusione
L'integrazione di Spark e Milvus offre possibilità entusiasmanti per applicazioni basate sull'IA. Con il nostro approccio semplificato alla portabilità dei dati, gli sviluppatori possono trasferire senza sforzo i dati da Spark/Databricks a Milvus/Zilliz Cloud, sia in tempo reale sia in modalità batch. Questa integrazione ti consente di creare soluzioni di IA efficienti e scalabili, sbloccando tutto il potenziale di queste potenti tecnologie.
Pronto a intraprendere il tuo percorso nell'IA? Inizia gratis con Zilliz Cloud oggi stesso, senza problemi di installazione e senza bisogno di una carta di credito.
Continua a leggere

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

Data Deduplication at Trillion Scale: How to Solve the Biggest Bottleneck of LLM Training
Explore how MinHash LSH and Milvus handle data deduplication at the trillion-scale level, solving key bottlenecks in LLM training for improved AI model performance.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.



