Presentamos el Conector de Databricks, una solución Well-Lit para optimizar la migración y transformación de datos no estructurados
Con la rápida evolución de las tecnologías de IA y aprendizaje automático (AI/ML), los embeddings vectoriales se han convertido en el método preferido para indexar datos no estructurados y realizar búsquedas semánticas.
La búsqueda impulsada por IA normalmente comprende dos fases distintas: la indexación de datos sin conexión y el servicio de consultas en línea, lo que requiere la utilización de diferentes pilas tecnológicas. Sin embargo, intentar realizar una transición fluida de los datos desde la pila de procesamiento sin conexión a la pila de servicio en línea de manera eficiente puede ser desafiante. La última versión de Zilliz Cloud presenta un Databricks Connector, una solución bien definida para agilizar este proceso mediante la integración de Apache Spark/Databricks y Milvus/Zilliz Cloud.
En esta publicación, presentaremos esta integración, exploraremos su uso práctico en escenarios del mundo real y te guiaremos sobre cómo utilizarla.
Cómo funciona Databricks Connector y sus casos de uso
Spark es reconocido por su capacidad para procesar datos a gran escala y su destreza en aprendizaje automático. Por otro lado, Milvus destaca en el manejo y la búsqueda eficientes de embeddings vectoriales generados por modelos de aprendizaje automático. Combinar estas dos tecnologías potentes facilita el desarrollo de aplicaciones de vanguardia en campos como la IA generativa, los sistemas de recomendación y la búsqueda de imágenes y videos.
Transferir datos de Spark a Milvus es una tarea común en la creación de búsquedas impulsadas por IA, pero a menudo implica código de integración complejo en el backend del sistema de búsqueda. El conector Spark-Milvus simplifica este proceso, condensándolo en una sola llamada de función dentro del programa Spark.
Este conector resulta beneficioso en varios escenarios.
Importación de datos por lotes
Los equipos con experiencia en aprendizaje automático suelen actualizar sus modelos de embeddings para incorporar los hallazgos de investigación más recientes. Después de cada actualización del modelo de embeddings, que requiere que todo el corpus de datos sea reprocesado por el trabajo de Spark y que se genere un nuevo conjunto de vectores, los equipos suelen necesitar 'código de integración' personalizado, un servicio dedicado u otro trabajo de Spark para integrar estos nuevos vectores en la pila de servicio. Sin embargo, con Databricks Connector, esta tarea se vuelve tan simple como otorgar al trabajo acceso de escritura al bucket de S3 de Milvus (o a un bucket efímero cuando se usa Zilliz Cloud). Este proceso optimizado permite que el trabajo de Spark que genera vectores cargue datos directamente en la instancia de Milvus mediante una sencilla llamada a una función de utilidad.
Inserción iterativa
Los usuarios que no operan a gran escala también pueden beneficiarse al insertar directamente registros de Spark DataFrame en Milvus usando el conector Spark-Milvus. Este enfoque ahorra el esfuerzo de escribir código para establecer conexiones y llamadas a API, lo que hace que el proceso de integración sea más fluido.
Cómo usar Databricks Connector
Esta sección demuestra cómo usar Databricks Connector para agilizar la migración y transformación de datos.
Insertar un Dataframe de Spark de forma iterativa
Con la conexión Spark-Milvus, transmitir datos de Spark a Milvus nunca ha sido tan fácil. Ahora puedes enviar datos directamente de Spark a Milvus con la API Dataframe nativa de Spark. El mismo código también funciona para Databricks y Zilliz (Milvus totalmente gestionado). Aquí tienes un fragmento de código que demuestra este enfoque:
// 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()
Cargar una colección por lotes
Recomendamos usar la función `MilvusUtils. bulkInsertFromSpark ()` para situaciones en las que necesite transferir grandes volúmenes de datos de manera eficiente. Este enfoque es sumamente eficiente para gestionar enormes conjuntos de datos.
Enfoque para Milvus
La integración implica buckets de S3 o MinIO para instancias de Milvus autoalojadas como almacenamiento interno. Al conceder acceso a Spark o Databricks, el trabajo de Spark puede usar conectores de Milvus para escribir datos en el bucket por lotes y luego insertar de forma masiva toda la colección para su servicio.
// 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 enfoque para Zilliz Cloud
Si utiliza Zilliz Cloud (el Milvus gestionado), puede aprovechar su práctica API de importación de datos. Zilliz Cloud proporciona herramientas y documentación completas para ayudarle a trasladar sus datos de manera eficiente desde diversas fuentes de datos, incluido Spark. Al configurar un bucket de S3 como intermediario y conceder acceso a Zilliz Cloud, la API de importación de datos carga sin problemas los datos desde el bucket de S3 a la base de datos vectorial.
Antes de ejecutar esta integración, debe cargar el runtime de Spark agregando un archivo jar al clúster de Databricks. Hay diferentes formas de instalar una biblioteca. La captura de pantalla siguiente muestra cómo subir un jar desde local al clúster.
Para obtener más detalles sobre la instalación de una biblioteca en el espacio de trabajo de Databricks, consulte la documentación oficial de Databricks para obtener más información.
La inserción masiva requiere almacenar los datos en un bucket temporal para que Zilliz Cloud pueda importarlos por lotes. Puede crear un bucket de S3 y configurarlo como una ubicación externa de Databricks. Consulte esta documentación para obtener más detalles. Para reducir el riesgo de seguridad de sus credenciales de Zilliz Cloud, puede gestionarlas de forma segura en Databricks siguiendo las instrucciones de Databricks.
Aquí tiene un fragmento de código que muestra el proceso de migración de datos por lotes. De forma similar al ejemplo de Milvus anterior, solo necesita reemplazar la credencial y la dirección del bucket de S3.
// Write the data in batch into the Milvus bucket storage.
val outputPath = "s3://my-temp-bucket/result"
df.write
.mode("overwrite")
.format("mjson")
.save(outputPath)
// Specify Milvus options.
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))
// Bulk insert Spark output files into Milvus
MilvusUtils.bulkInsertFromSpark(spark, targetMilvusOptions, outputPath, "mjson")
Uniéndolo todo: un ejemplo de notebook que te guía por todo el proceso
Para ayudarte a empezar rápidamente, hemos preparado un ejemplo de notebook que te guía por los procesos de transferencia de datos en streaming y por lotes con Milvus y Zilliz Cloud.
Conclusión
La integración de Spark y Milvus presenta posibilidades apasionantes para aplicaciones impulsadas por IA. Con nuestro enfoque simplificado para la portabilidad de datos, los desarrolladores pueden transferir datos sin esfuerzo de Spark/Databricks a Milvus/Zilliz Cloud, ya sea en tiempo real o en modo por lotes. Esta integración te permite crear soluciones de IA eficientes y escalables, desbloqueando todo el potencial de estas potentes tecnologías.
¿Listo para emprender tu viaje de IA? Comienza gratis con Zilliz Cloud hoy mismo, sin complicaciones de instalación y sin necesidad de tarjeta de crédito.
Sigue leyendo

Notion's Vector Search Is Excellent. Their Next Problem Is Harder.
Notion solved vector search scaling in two years. The next bottleneck — offline context engineering, unified data, and the real-time/offline gap — is harder.

Why Not All VectorDBs Are Agent-Ready
Explore why choosing the right vector database is critical for scaling AI agents, and why traditional solutions fall short in production.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



