Zilliz 推出 Spark Connector:简化非结构化数据处理流程

随着人工智能(AI)和深度学习(Deep Learning)技术的高速发展,使用神经网络模型将数据转化为 Embedding 向量 已成为处理非结构化数据并实现语义检索的首选方法,广泛应用于搜索、推荐系统等 AI 业务中。

以生产级别的搜索系统为例,该系统通常包含两个部分:离线数据索引和在线查询服务。实现该系统需要使用多种技术栈。例如,在离线处理中,如何将来源于多种渠道的非结构化数据数据高效、方便地处理并推送到向量数据库以实现在线查询,是一个充满挑战的问题。Apache Spark 和 Databricks 是应用广泛的大批量数据处理方案。Zilliz Cloud 推出了 Spark Connector。该工具将 Milvus 和 Zilliz Cloud 向量数据库 API 集成于 Apache Spark 和 Databricks 任务,大大简化数据处理和推送的实现难度。

本文将介绍 Spark Connector 及其应用场景,并手把手教你如何使用它实现数据推送。

Spark Connector 工作原理及使用场景

Apache Spark 和 Databricks 适合处理海量数据,例如以批量的方式进行非结构化数据清洗并调用模型生成 Embedding 向量。而 Milvus 则擅长存储模型生成的 Embedding 向量数据,并构建索引支持在线服务中的高效查询。这两大工具的强强联合可以实现轻松开发生成式 AI、推荐系统、图像和视频搜索等应用。

当用户在搭建 AI 应用时,很多用户都会遇到如何将数据从 Apache Spark 或 Databricks 导入到 Milvus 或 Zilliz Cloud (全托管的 Milvus 服务) 中的问题。使用 Spark Connector,用户能够在 Apache Spark 或 Databricks 任务中直接调用函数,完成数据向 Milvus 的增量插入或者批量导入,不需要再额外实现“胶水”业务逻辑,简化了数据推送流程。

批量导入数据

由于深度学习进展日新月异,专注于深度学习的团队通常需要频繁更新 Embedding 模型。在第一次批量建库,或者每次更新模型后,都需要处理全量数据、生成一套新的向量数据集。这样一来,就需要启动一个新的 Spark 任务来执行这一次处理,并将新的向量数据集重新插入到向量数据库中以供在线服务使用。有了 Databricks Connector,您只需要授予 Spark 任务写入 Milvus S3 bucket (或者授予 Zilliz Cloud 访问临时的数据源 bucket)的权限即可。简化后的数据处理流程允许您仅仅通过一个简单的函数调用将 Spark 任务生成的向量直接加载到 Milvus 或 Zilliz Cloud 实例中。

增量插入数据

// 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()

对于数据量相对较小的用户而言,使用 Spark Connector 也能简化开发工作。您的任务中无需再实现建立服务端连接以及插入数据的代码,只需调用 Connector 中提供的函数即可。

如何使用 Spark Connector

下面,我们将介绍如何使用 Spark Connector 简化数据迁移和处理流程。

使用 Dataframe 直接进行增量插入

使用 Spark Connector,您可以直接利用 Apache Spark 中 Dataframe 的 write API 将数据以增量方式插入到 Milvus 中,大幅降低数据插入流程的实现成本。同理,您也可以直接将数据从 Apache Spark 或 Databricks 导入到 Zilliz Cloud(全托管的 Milvus 服务)中。以下为示例代码:

将数据批量导入到 Collection 中

如果您需要将大量数据高效导入 Collection 中,我们推荐使用 MilvusUtils. bulkInsertFromSpark() 函数。

  • 将数据加载到 Milvus Collection 中

这个过程中需要使用 S3 或 MinIO bucket 作为 Milvus 实例的内部存储。Spark 或 Databricks 任务获取 bucket 的写入权限后,就可以使用 Connector 将数据批量写入 bucket 中,最终一次操作批量插入到向量 Collection 中以供查询使用。

// 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")
  • 将数据加载到 Zilliz Cloud Collection 中

如果您使用的是全托管 Milvus 服务——Zilliz Cloud,您可以使用 Zilliz Cloud 提供的数据导入 API 。Zilliz Cloud 提供多样的工具和完整的文档,从而帮助您将各种来源(如 Spark)的数据高效导入 Zilliz Cloud 中。您需要设置一个 S3 bucket 作为媒介,然后授权 Zilliz Cloud 读取 bucket 中的数据。这样一来,Zilliz Cloud 数据导入 API 便可无缝将数据从 S3 bucket 加载到向量数据库中。

以 Databricks 为例,开始前,您需要先通过在 Databricks 集群中添加 jar 文件来加载带有Spark Connector 的 Runtime 库。有多种安装库的方法。下图展示了如何从本地上传 jar 至集群。

如需了解更多如何在 Databricks Workspace 中安装库的信息,请参阅 Databrick 官方文档。

批量插入数据时需要将数据存储在一个临时的 bucket 中,随后再批量导入至 Zilliz Cloud 中。您可以先创建一个 S3 bucket,点击此处了解详情。为了保护您的 Zilliz Cloud 鉴权用户名密码安全,您可以跟随指南在 Databricks 上安全管理密码。

以下为批量数据迁移的示例代码。和前文的 Milvus 例子一样,您只需要填写用于鉴权的向量数据库 URI、Token 以及 S3 bucket 的地址、AK、SK。

// 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 properties = Map(MILVUS_URI -> uri,MILVUS_TOKEN -> token,MILVUS_COLLECTION_NAME -> collectionName,MILVUS_STORAGE_ENDPOINT -> s3Endpoint,MILVUS_STORAGE_USER -> s3ak,MILVUS_STORAGE_PASSWORD -> s3sk,ZILLIZCLOUD_API_KEY -> apiKey,ZILLIZCLOUD_REGION -> region,ZILLIZCLOUD_INSTANCE_ID -> clusterId,
)
val milvusOptions = new MilvusOptions(new CaseInsensitiveStringMap(properties.asJava))// Call util func to bulkinsert data into Zilliz Cloud through Import Data API.
MilvusUtils.bulkInsertFromSpark(spark, milvusOptions, outputDir, "json")

Connector 使用全流程:Notebook 示例

为帮助您快速上手,我们准备了一个 Notebook 示例 完整地介绍了如何使用 Connector 简化数据增量或批式导入至 Milvus 或 Zilliz Cloud 的流程。

总结

Apache Spark 和 Databricks 与 Milvus 和 Zilliz Cloud(全托管的 Milvus 服务)的整合为 AI 应用开发进一步带来了便利。开发人员可以轻松将数据以增量或批量的形式从数据处理端导入 Milvus 和 Zilliz Cloud 中,实现高效的检索。Spark Connector 助力高效开发可扩展的 AI 解决方案,充分释放非结构化数据的潜能。

准备好开启您的 AI 之旅了吗?立刻免费使用 Zilliz Cloud。

本文作者:陈将,Zilliz 生态和 AI 平台负责人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用护眼灯还需要开灯吗?护眼灯行业三大套路迷局揭秘

用护眼灯还需要开灯吗?在使用护眼台灯时,同时开启室内的主照明十分必要。如果关闭其他灯具,仅保留护眼台灯,那么只有台灯周围的小片区域能够被照亮,而房间的其他部分则处于相对昏暗的状态。这种明显的光线差异会造成视…

freertos的学习cubemx版

HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则, 变量名 :类型前缀, c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…

《书生大模型实战营第3期》入门岛 学习笔记与作业:Python 基础知识

文章大纲 Python 简介1 安装Python1.1 什么是conda?1.1.1 功能与作用:1.1.2 常用命令:1.1.3 适用性: 1.2 Python安装与学习环境准备1.2.1 下载miniconda1.2.2 安装miniconda1.2.3 创建一个python练习专属的conda虚拟环境 2: Pytho…

【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏

最终效果 【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏 前言 今天用unity制作一个简单的爬坡2d赛车小游戏 素材 https://www.spriters-resource.com/mobile/hillclimbracing/ 拼装车素材 车身添加碰撞体,摩檫力0 轮胎添加碰撞体和刚体&#xff0…

【VSCode实战】Golang无法跳转问题竟是如此简单

上一讲【VSCode实战】Go插件依赖无法安装 – 经云的清净小站 (skycreator.top),开头说到了在VSCode中Golang无法跳转的问题,但文章的最后也没给出解决方案,只解决了安装Go插件的依赖问题。 解决了插件依赖问题,无法跳转的问题也离…

苍穹外卖 02

1.新增员工 controller: EmployeeServiceImpl: 实现controller里的save方法,要调用到mapper层的insert方法 因为员工登录成功后,会将id封装进jwt令牌,并响应给前端 所以后续请求中前端会携带jwt令牌。通过令牌可解析出被封装的…

C++:平衡搜索二叉树(AVL)

hello,各位小伙伴,本篇文章跟大家一起学习《C:平衡搜索二叉树(AVL)》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 :maple_leaf:AVL树:maple_leaf:…

大学计算机专业主要课程及概要介绍

大学计算机专业主要课程及概要介绍 大学计算机专业是一门涵盖广泛领域的学科,旨在培养学生在计算机科学与技术方面的理论知识与实践能力。该专业课程设置丰富多样,涵盖了从基础理论到高级应用的多个方面。以下是一些主要的课程及其概要介绍:…

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明:此篇示例源码非原创,原作者雷霄骅。雷霄骅,中国传媒大学通信与信息系统专业博士生,在此向雷霄骅雷神致敬…

OpenHarmony 开发

本心、输入输出、结果 文章目录 OpenHarmony 开发前言JonathanOpenHarmony 并不是 AndroidOpenHarmony 应用迁移OpenHarmony 的开发流程OpenHarmony 开发 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助,欢迎点赞、收藏、评…

2023IMO预选题几何第6题

锐角 △ A B C \triangle ABC △ABC 的外接圆为 ω \omega ω, 圆 I I I 与 ω \omega ω 内切于 A A A, 且与 B C BC BC 切于点 D D D. 设直线 A B AB AB, A C AC AC 分别与 I I I 交于点 P P P, Q Q Q, 点 M M M, N N N 在直线 B C BC BC 上, 满足 B B B 是 …

CeoMax总裁主题最新3.8.1破解免授权版/WordPress付费资源素材下载主题

CeoMax总裁主题最新3.8.1破解免授权版,一套WordPress付费资源素材下载的主题,感觉这是做资源站唯一一个可以和ripro媲美甚至超越的模板,UI很美,功能也很强大,有想学习的可下载搭建学习一下,仅供学习研究借鉴…

仿学校网页

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,initial-scale1.0"><title>学校网页</title> <style>.WebTop{backg…

誉天网络安全课程怎么样

学员服务质量保障讲师团队&#xff1a;平均5年课程交付经验&#xff0c;授课质量有保障辅导团队&#xff1a;实验论述辅导讲师&#xff0c;实验备考环境复刻&#xff0c;备考资料完善&#xff0c;及时更新就业服务&#xff1a;简历制作培训&#xff0c;面试技巧培训&#xff0c…

昇思MindSpore学习入门-轻量化数据处理

在资源条件允许的情况下&#xff0c;为了追求更高的性能&#xff0c;一般使用Pipeline模式执行数据变换Transforms。 基于Pipeline模式执行的最大特点是需要使用map方法&#xff0c;如下图中将Resize、Crop、HWC2CHW交由map调度&#xff0c;由其负责启动和执行给定的Transform…

R语言统计分析——控制流

参考资料&#xff1a;R语言实战【第2版】 语句&#xff08;statement&#xff09;是一条单独的R语言或一组复合语言&#xff08;包含在花括号{}中的一组R语言&#xff0c;使用分号分隔&#xff09; 条件&#xff08;cond&#xff09;是一条最终被解析为真&#xff08;TRUE&…

python黑马笔记

运算符&#xff1a; 算术运算符&#xff1a; 加 - 减 * 乘 / 除 // 整除 % 取余 ** 求平方 除法计算得出的结果都是小数 赋值运算符&#xff1a; 标准赋值&#xff1a; 复合赋值&#xff1a; 、 - 、 * 、 / 、// 、 ** 字符串&#xff1a; 字符串拓展内容&#xf…

护网紧急情况应对指南:Linux 应急响应手册

继上一篇&#xff1a;护网紧急情况应对指南&#xff1a;Windows版v1.2全新升级版 之后 收到小伙伴后台要Linux应急手册&#xff0c;今天给大家安排上。 《Linux应急手册》是一本为Linux系统管理员和运维工程师量身打造的实用指南&#xff0c;旨在帮助他们快速应对各种突发状况…

基于FFMPEG和SDL的音视频解码播放的实现过程与相关细节

目录 1、视频播放器原理 2、FFMPEG解码 2.1 FFMPEG库 2.2、数据类型 2.3、解码 2.3.1、接口函数 2.3.2、解码流程 3、SDL播放 3.1、接口函数 3.2、视频播放 3.3、音频播放 4、音视频的同步 4.1、获取音频的播放时间戳 4.2、获取当前视频帧时间戳 4.3、获取视…

MATLAB仿真:数字信号处理用FFT对信号分析

目录 1.实验目的 2 实验原理 3.实验仪器及设备 4.实验步骤及内容 (1)对以下序列进行谱分析。 (2)对以下周期序列进行谱分析。 (3)对模拟周期信号进行谱分析 1.实验目的 学习用 FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,…