Apresentamos o Databricks Connector, uma solução bem-iluminada para simplificar a migração e a transformação de dados não estruturados
Com a rápida evolução das tecnologias de IA e machine learning (AI/ML), os embeddings vetoriais tornaram-se o método preferido para indexar dados não estruturados e realizar pesquisas semânticas.
A busca orientada por IA normalmente compreende duas fases distintas: indexação de dados offline e atendimento de consultas online, exigindo a utilização de diferentes stacks tecnológicos. No entanto, tentar fazer a transição de dados de forma contínua do stack de processamento offline para o stack de atendimento online com eficiência pode ser desafiador. A versão mais recente do Zilliz Cloud apresenta um Databricks Connector, uma solução bem estruturada para simplificar esse processo integrando Apache Spark/Databricks e Milvus/Zilliz Cloud.
Neste post, apresentaremos essa integração, exploraremos seu uso prático em cenários do mundo real e mostraremos passo a passo como usá-la.
Como o Databricks Connector funciona e seus casos de uso
O Spark é conhecido por sua capacidade de processar dados em larga escala e por sua proficiência em machine learning. Por outro lado, o Milvus se destaca em lidar e pesquisar com eficiência embeddings vetoriais gerados por modelos de machine learning. Combinar essas duas tecnologias poderosas facilita o desenvolvimento de aplicações de ponta em áreas como IA generativa, sistemas de recomendação e busca de imagens e vídeos.
Transferir dados do Spark para o Milvus é uma tarefa comum na criação de busca impulsionada por IA, mas muitas vezes envolve um código de integração complexo no backend do sistema de busca. O conector Spark-Milvus simplifica esse processo, condensando-o em uma única chamada de função dentro do programa Spark.
Este conector se mostra benéfico em vários cenários.
Importação de dados em lote
Equipes com experiência em machine learning costumam atualizar seus modelos de embedding para incorporar as descobertas de pesquisa mais recentes. Após cada atualização do modelo de embedding, exigindo que todo o corpus de dados passe por reprocessamento pelo job do Spark e gere um novo conjunto de vetores, as equipes frequentemente precisam de 'código de integração' personalizado, um serviço dedicado ou outro job do Spark para integrar esses novos vetores ao stack de atendimento. No entanto, com o Databricks Connector, essa tarefa torna-se tão simples quanto conceder ao job acesso para gravar no bucket S3 do Milvus (ou em um bucket efêmero ao usar o Zilliz Cloud). Esse processo simplificado permite que o job do Spark gerador de vetores carregue dados diretamente na instância do Milvus por meio de uma chamada direta a uma função utilitária.
Inserção iterativa
Usuários que não operam em grandes escalas também podem se beneficiar ao inserir diretamente registros de Spark DataFrame no Milvus usando o conector Spark-Milvus. Essa abordagem economiza o esforço de escrever código para estabelecer conexão e chamadas de API, tornando o processo de integração mais fluido.
Como usar o Databricks Connector
Esta seção demonstra como usar o Databricks Connector para simplificar a migração e transformação de dados.
Inserindo um Spark Dataframe iterativamente
Com a conexão Spark-Milvus, transmitir dados do Spark para o Milvus nunca foi tão fácil. Agora você pode enviar dados diretamente do Spark para o Milvus com a API Dataframe nativa do Spark. O mesmo código também funciona para Databricks e Zilliz (Milvus totalmente gerenciado). Aqui está um trecho de código que demonstra essa abordagem:
// 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()
Carregar uma coleção em lote
Recomendamos usar a função `MilvusUtils. bulkInsertFromSpark ()` para situações em que você precisa transferir grandes volumes de dados com eficiência. Essa abordagem é supereficiente para lidar com enormes conjuntos de dados.
Abordagem para Milvus
A integração envolve buckets S3 ou MinIO para instâncias Milvus auto-hospedadas como armazenamento interno. Ao conceder acesso ao Spark ou ao Databricks, o job do Spark pode usar conectores Milvus para gravar dados no bucket em lote e, em seguida, inserir em massa toda a coleção para disponibilização.
// 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")
Uma abordagem para Zilliz Cloud
Se você estiver usando o Zilliz Cloud (o Milvus gerenciado), poderá aproveitar sua conveniente Data Import API. O Zilliz Cloud fornece ferramentas e documentação abrangentes para ajudar você a mover seus dados com eficiência a partir de várias fontes de dados, incluindo o Spark. Ao configurar um bucket S3 como intermediário e conceder acesso ao Zilliz Cloud, a Data Import API carrega perfeitamente os dados do bucket S3 para o banco de dados vetorial.
Antes de executar esta integração, você deve carregar o runtime do Spark adicionando um arquivo jar ao Databricks Cluster. Há diferentes maneiras de instalar uma biblioteca. A captura de tela abaixo mostra o upload de um jar do local para o cluster.
Para obter mais detalhes sobre a instalação de uma biblioteca no workspace do Databricks, consulte a documentação oficial do Databricks para saber mais.
A inserção em massa requer o armazenamento dos dados em um bucket temporário para que o Zilliz Cloud possa importá-los em lotes. Você pode criar um bucket S3 e configurá-lo como um local externo do Databricks. Consulte esta documentação para obter detalhes. Para reduzir o risco de segurança das suas credenciais do Zilliz Cloud, você pode gerenciá-las com segurança no Databricks seguindo as instruções do Databricks.
Aqui está um trecho de código que mostra o processo de migração de dados em lote. Semelhante ao exemplo do Milvus acima, você só precisa substituir as credenciais e o endereço do bucket S3.
// Escreva os dados em lote no armazenamento de bucket do Milvus.
val outputPath = "s3://my-temp-bucket/result"
df.write
.mode("overwrite")
.format("mjson")
.save(outputPath)
// Especifique as opções do 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))
// Inserir em massa os arquivos de saída do Spark no Milvus
MilvusUtils.bulkInsertFromSpark(spark, targetMilvusOptions, outputPath, "mjson")
Juntando tudo: um exemplo de notebook que orienta você por todo o processo
Para ajudar você a começar rapidamente, preparamos um exemplo de notebook que orienta você pelos processos de transferência de dados em streaming e em lote com Milvus e Zilliz Cloud.
Conclusão
A integração do Spark e do Milvus apresenta possibilidades empolgantes para aplicações impulsionadas por IA. Com nossa abordagem simplificada para a portabilidade de dados, os desenvolvedores podem transferir dados sem esforço do Spark/Databricks para o Milvus/Zilliz Cloud, seja em tempo real ou em modo de lote. Essa integração permite que você crie soluções de IA eficientes e escaláveis, liberando todo o potencial dessas tecnologias poderosas.
Pronto para embarcar na sua jornada de IA? Comece gratuitamente com o Zilliz Cloud hoje, sem complicações de instalação e sem exigir um cartão de crédito.
Continue lendo

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vectorDB deployments.



