CN110795469B - 基于Spark的高维序列数据相似性查询方法及系统 - Google Patents
基于Spark的高维序列数据相似性查询方法及系统 Download PDFInfo
- Publication number
- CN110795469B CN110795469B CN201910963344.5A CN201910963344A CN110795469B CN 110795469 B CN110795469 B CN 110795469B CN 201910963344 A CN201910963344 A CN 201910963344A CN 110795469 B CN110795469 B CN 110795469B
- Authority
- CN
- China
- Prior art keywords
- hash
- value
- dimensional sequence
- sequence data
- bucket
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Spark的高维序列数据相似性查询方法及系统,包括数据预处理、索引构建和查询等处理步骤。本发明使用分布式集群Spark提高计算能力;通过利用局部敏感哈希(LSH)函数来构建索引解决了高维序列数据处理困难等问题;查询过程只在部分Worker节点中进行,大大降低了数据的处理量,并且通过碰撞计数机制,有效的减少了候选集的规模,加速相似性查找的速率。本发明可以对用户任意给出的一条高维序列数据对象,快速且准确的从大规模数据集中查找出大部分相似数据对象。
Description
技术领域
本发明涉及一种基于Spark集群的高维序列数据相似性查询方法,属于分布式集群计算 及大数据处理技术领域。
背景技术
高维序列数据的相似性查询是一种从一个给定的海量高维序列数据集中找出与之最相似 的一组高维序列数据子集的方法,其在金融、气象、医疗等多个领域中都有着广泛的应用。 而高维序列数据存在数据量大的特性,使得在单机环境中进行相似性查询操作时,效率变得 低下。同时高维数据由于数据维度高的特性,易引起维度灾难,并且随着数据维度的增加, 数据与数据之间的对比性也逐渐下降,使得相似性查询算法的性能也急剧下降。
现有的一些数据库系统和查询技术主要是基于外存,随着数据量的增大,其系统的I/O 性能将迅速降低,在进行相似性查询分析时,并不能及时做出结果反馈,故不满足处理海量 数据下的客户需求。近年来,集群计算成为大数据领域内最流行的一种大数据解决方案,在 众多集群计算系统中,Apache Spark的性能尤为优异。
Apache Spark是专为大规模数据处理而设计的快速通用的内存并行计算框架,用来构建 大型的、低延迟的数据分析应用程序。它扩展了MapReduce模型,已有效地将其用于更多类 型的计算,包括交互式查询和流处理。Spark的主要特性是其基于内存的计算模型,提高了应 用程序的处理速度。Spark的核心数据结构为弹性分布式数据集(RDD),RDD具有高容错和 并行的特性,它可以让用户显式地将中间结果数据集保存在内存中,实现内存计算和多机并 行处理机制的同时,保证了任务执行的高吞吐量及低延迟等特性。
发明内容
发明目的:为了克服现有技术中存在的不足,本发明提供一种基于Spark的高维序列数 据相似性查询方法,本发明能够快速高效地从海量数据集中检索出与用户任意给定的一条高 维序列数据相似的一个高维序列数据子集。
技术方案:为实现上述目的,本发明采用的技术方案为:
一种基于Spark的高维序列数据相似性查询方法,运行在分布式集群环境Spark中,其 基于内存计算的特性,能够很好地提高程序运算的速度;使用局部敏感哈希(LSH)函数, 有效的解决了数据维度过高的问题。LSH的基本思想是在高维数据空间中的两个相似的数据 通过哈希函数被映射到低维数据空间中后,将会以很高的概率发生冲突;而原本两个不相似 的数据,在低维空间中有很高的概率不发生冲突。由于传统的LSH函数无法满足大规模数据 查询的需求,本发明拓展了LSH函数在分布式集群环境Spark中对海量高维序列数据集建立 索引与执行相似性查询功能的能力,具体包括以下步骤:
步骤(1),将高维序列数据读入到Spark集群单元中进行数据预处理;
步骤(2),对预处理后的数据进行索引构建:
步骤(2.1),选取局部敏感哈希LSH哈希函数族,用于构建复合哈希函数gi,其步骤如 下:
步骤(2.1.1),选取基于p-stable分布的LSH哈希函数族H,其哈希函数形式为其中,v是一个原始数据,a是一个与v同维度的随机向量集合,它的元素从p-stable分布中独 立选取,w是窗口长度参数,b是从[0,w]中随机选取的实数,并且选择AND-OR组合进行复 合哈希函数的构建;
步骤(2.1.4),而L个复合哈希函数之间采用OR操作构成;
步骤(2.2),Spark集群单元中的Driver进程使用预先设定的参数,来初始化复合哈希函 数gi;
步骤(2.3),Spark集群单元中的每个Worker节点并行的构建哈希表RDD的子集,每个 Worker节点中使用相同的参数构建哈希函数,生成L个哈希表;
步骤(2.4),通过复合哈希函数gi计算数据RDD中的每条记录的哈希值,该值作为该条 记录落入哈希表i中的哈希桶的桶号,1≤i≤L;
步骤(2.5),将哈希表i的表号,记为tablei,每条记录在哈希表i中的哈希桶的桶号,记 为bucket,把tablei和bucket进行组合,作为MapReduce过程的键值对中的key值,而该条 记录的标识符id值作为键值对中的value值,最终的键值对的形式为((tablei,bucket),id), 1≤i≤L;
步骤(2.6),将每条记录的哈希表的表号tablei和相应哈希桶的桶号bucket作为输入值, 通过使用BKDRHash函数计算得到一个哈希值,该哈希值被使用来计算该条记录落入的哈希 桶的分区索引值,即得出该哈希桶将位于哪个分区;
步骤(3),查询处理,具体包括以下子步骤:
步骤(3.1),Driver进程加载使用索引构造阶段中使用的所有参数和哈希函数,构建出相 同的哈希表;
步骤(3.2),Driver进程按照与步骤(2.3)-(2.4)相同的操作,使用同样的参数和哈希 函数,计算所要查询的高维序列数据对象q的哈希表的表号tablei和相应哈希桶的桶号bucket, 1≤i≤L;
步骤(3.3),将所要查询的高维序列数据对象q的哈希表的表号tablei和相应哈希桶的桶 号bucket作为q的键值对的key值,同时键值对的value值为高维序列数据对象q本身,键 值对的最终形式为((tablei,bucket),q),1≤i≤L;
步骤(3.4),将所要查询的高维序列数据对象q的键值对中key值即(tablei,bucket), 作为输入值,执行与步骤(2.6)相同的操作,使用BKDRHash函数计算得到一个哈希值,该 哈希值用来计算高维序列数据对象q的落入的哈希桶所处的分区的索引值;
步骤(3.5),Driver进程利用步骤(2.6)得到的原始数据的分区索引值,将q发送给含 有由步骤(3.4)所计算出的分区索引值的分区的Worker节点;
步骤(3.6),在步骤(3.5)中求得的Worker节点中,将所要查询的高维序列q与Worker 节点分区中含有的原始记录的id进行碰撞冲突组合;
步骤(3.7),聚合具有相同key值的数据集并统计次数,生成((q,id),count)键值对, 其中,count为所要查询的高维序列数据对象q与每一条记录的碰撞冲突总次数;
步骤(3.8),将键值对((q,id),count)按照count值进行降序排序处理;
步骤(3.9),对于所要查询的高维序列数据对象q的KNN查询,返回前k个结果,输出形式为((q,id),count),获得前k个记录的id并返回到Drive进程;
步骤(3.10),Driver进程将这些id发送给Worker节点,Worker节点通过id在数据RDD 中查找相应的数据,并将结果返回。
优选的:所述步骤(1)中进行数据预处理的方法如下:
步骤(1.1),将高维序列数据从数据库或HDFS读入Spark集群单元中;
步骤(1.2),依次读取Spark集群单元中的每条高维序列数据,并为每条高维序列数据设 置唯一的标识符,记为id;
步骤(1.4),Spark集群单元中Driver进程根据读取的数据,得到数据RDD,并根据设 置的分区数进行partition操作,各个Worker节点均含有一个或多个分区,其中分区中的每条 记录是由一条高维序列数据的id值和数据本身所组成的一个键值对。
优选的:步骤(2.2)中Driver进程使用预先设定的参数包括:高维序列数据的维度d, 哈希表的数量L,哈希函数的个数k。
优选的:步骤(2.6)中得出该哈希桶将位于哪个分区的方法包括以下步骤:
步骤(2.6.1),将每条记录的哈希表的表号tablei和相应哈希桶的桶号bucket作为输入值, 使用BKDRHash函数,计算得出一个哈希值,1≤i≤L,1≤j≤k,根据哈希值进行如下判 断:
步骤(2.6.2),如果哈希值等于0,就将这条记录的分区索引值记为0;
步骤(2.6.3),否则就将哈希值对分区数取余数,同时对余数做如下判断:
步骤(2.6.3.1),如果余数大于零,则将余数作为该条记录的分区索引值;
步骤(2.6.3.2),如果余数小于零,则将余数加上分区数,然后将得到的数,作为该条记 录的分区索引值;
步骤(2.7),每个Worker节点都在外存中存储所有的参数和哈希函数。
优选的:步骤(3.6)中将所要查询的高维序列q与Worker节点分区中含有的原始记录 的id进行碰撞冲突组合的方法:
步骤(3.6.1),将所要查询的高维序列数据对象q和分区中包含的每一个原始记录的id 进行组合,作为key值;
步骤(3.6.2),令每一条原始记录和所要查询的高维序列数据对象q的冲突统计,即整数 1,作为value值;
步骤(3.6.3),将上述key值与value值,组合形成键值对,形式为((q,id),1)。
一种基于Spark的高维序列数据相似性查询系统,包括Spark集群单元、复合哈希函数gi单 元,Spark集群单元包括相互连接的Driver Progarm模块、Cluster Manager模块以及Worker Node模块,Driver Progarm模块用于运行应用程序的main函数并且创建SparkContext的程序; Cluster Manager模块负责整个集群的资源的管理和分配,作为Master节点;Worker Node模 块是集群中的工作节点,负责运行应用程序代码;所述复合哈希函数gi单元分别与Driver Progarm模块、Cluster Manager模块以及Worker Node模块连接;所述Spark集群单元使用 Master-Slave模型,Master是集群单元中含有Master进程的节点,slave是集群单元中含有 Worker进程的节点。
本发明相比现有技术,具有以下有益效果:
1、使用局部敏感哈希(LSH)对数据进行处理。通过使用局部敏感哈希对数据集进行哈希 处理,有效地解决了原始数据集的数据量大,数据维度高等特性而产生的难以处理等问题, 大大降低了数据量的体积,便于数据在Spark集群中的各节点上进行处理。并且数据集经过 LSH处理之后,最终获得的候选数据对象集也变得很小,这样就极大的提高了查询的效率, 同时也很好地降低了查询消耗的时间,具有极高的低时延性能。
2、该查询方法具有良好的查询精度,同时适用于各种数据格式,例如时间序列数据、图 片数据等,同时其对于Spark集群的规模大小和查询数据规模大小都具有良好的可拓展性。
附图说明
图1为Spark的架构图。
图2为基于Spark的高维序列数据相似性查询方法流程图。
图3为本方法数据预处理流程图。
图4为本方法索引构建流程图。
图5为本方法查询处理阶段流程图。
具体实施方式
下面结合附图和具体实施例,进一步阐明本发明,应理解这些实例仅用于说明本发明而 不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式 的修改均落于本申请所附权利要求所限定的范围。
一种基于Spark的高维序列数据相似性查询系统,其架构如图1所示,包括Spark集群 单元、复合哈希函数gi单元,Spark集群单元包括相互连接的Driver Progarm模块(运行Application中的main()函数并创建SparkContext的进程管理器模块)、Cluster Manager模块(集 群管理器模块)以及Worker Node模块(工作节点模块),Driver Progarm模块用于运行应用 程序的main函数并且创建SparkContext(Spark上下文)的程序,一个Spark作业运行时包 括一个Driver进程,是作业的主进程。Cluster Manager模块负责整个集群的资源的管理和分 配,在Spark Standalone模式集群中,就是Master节点;Worker Node模块是集群中的工作节 点,负责运行应用程序代码。Executor是在一个Worker Node上为Application启动的一个进 程,负责运行任务(Task)。所述复合哈希函数gi单元分别与Driver Progarm模块、Cluster Manager模块以及Worker Node模块连接。所述Spark集群单元使用了分布式计算中的 Master-Slave模型(主从模型),Master(主)是集群单元中含有Master进程的节点,slave(从) 是集群单元中含有Worker进程的节点。Application(应用程序)是用户编写的Spark应用程 序,包含Driver和分布在集群中各节点上的Executor代码。
Driver进程启动多个Worker,Worker从文件系统中加载数据并产生RDD(即将数据放 到RDD中),并按照不同分区Cache到内存中。
一种基于Spark的高维序列数据相似性查询方法,如图2所示,使用分布式集群Spark, 利用Spark提供的内存计算特性,提高了应用程序的处理速度,Spark基于有向无环图(DAG) 的任务调度执行机制,将多个阶段的任务串联或并联执行,无须将中间结果存放在HDFS上, 将大大提高相似性查询的高效和低时延,并能通过拓展集群节点,而不断提高集群的计算能 力。本实施例将高维序列数据从数据库或HDFS(Hadoop Distributed FileSystem、Hadoop分 布式文件系统)读入Spark集群中,并按照相应的步骤进行数据的预处理和索引的构建。当 接受相似性查询请求时,按照相应步骤,在集群中进行快速准确的查找。
本发明的处理阶段主要分为三个阶段,分别为数据预处理、索引构建和查询处理。接下 来,将具体介绍这三个阶段。
(1)数据预处理,如图3所示,具体包括以下子步骤:
(1.1)将高维序列数据从数据库或HDFS读入集群。
(1.2)依次读取集群中的每条高维序列数据,并为每条高维序列数据设置唯一的标识符, 记为id。
(1.4)Driver进程根据读取的数据,得到数据RDD,并根据设置的分区数进行partition 操作(分区操作),各个Worker节点均含有一个或多个分区,其中分区中的每条记录是由一 条高维序列数据的id值和数据本身所组成的一个键值对。
(2)索引构建,如图4所示,具体包括以下子步骤:
(2.1)选取LSH哈希函数族,用于构建复合哈希函数gi。本实施例中构建复合哈希函数 的具体步骤如下:
(2.1.1)选取基于p-stable分布(p-稳态分布)的LSH函数族H,其哈希函数形式为其中v是一个原始数据,a是一个与v同维度的随机向量集合,它的元素从p-stable分布中独 立选取,w是窗口长度参数,b是从[0,w]中随机选取的实数。并且选择AND-OR组合进行复 合哈希函数的构建。
(2.2)集群中的Driver进程使用预先设定的参数,例如高维序列数据的维度d,哈希表 的数量L,哈希函数的个数k等参数,用来初始化复合哈希函数gi。
(2.3)集群中的每个Worker节点并行的构建哈希表RDD的子集。每个Worker节点中使用相同的参数构建哈希函数,生成L个哈希表。
(2.4)通过复合哈希函数gi计算数据RDD中的每条记录的哈希值,该值作为该条记录 落入哈希表i中的哈希桶的桶号,1≤i≤L。
(2.5)将哈希表i的表号,记为tablei,每条记录在哈希表i中的哈希桶的桶号,记为bucket, 把tablei和bucket进行组合,作为MapReduce过程的键值对中的key值,而该条记录的标识 符id值作为键值对中的value值,最终的键值对的形式为((tablei,bucket),id),1≤i≤L。
(2.6)将每条记录的哈希表的表号tablei和相应哈希桶的桶号bucket作为输入值,通过 使用BKDRHash函数(本算法由于在Brian Kernighan与Dennis Ritchie的《The CProgramming Language》一书被展示而得名)计算得到一个哈希值,该哈希值被使用来计算该条记录落入 的哈希桶的分区索引值,即得出该哈希桶将位于哪个分区。本实施例中RKDRHash函数计算 的具体步骤为:
(2.6.1)将每条记录的哈希表的表号tablei和相应哈希桶的桶号bucket作为输入值,使用 BKDRHash函数,计算得出一个哈希值,1≤i≤L。根据哈希值进行如下判断。
(2.6.2)如果哈希值等于0,就将这条记录的分区索引值记为0。
(2.6.3)否则就将哈希值对分区数取余数。同时对余数做如下判断:
(2.6.3.1)如果余数大于零,则将余数作为该条记录的分区索引值。
(2.6.3.2)如果余数小于零,则将余数加上分区数,然后将得到的数,作为该条记录 的分区索引值。
(2.7)最后,每个Worker节点都在外存中存储所有的参数和哈希函数。
(3)查询处理,如图5所示,具体包括以下子步骤:
(3.1)Driver进程加载使用索引构造阶段中使用的所有参数和哈希函数,构建出相同的 哈希表。
(3.2)Driver进程按照与步骤(2.3)-(2.4)相同的操作,使用同样的参数和哈希函数, 计算所要查询的高维序列数据对象q的哈希表的表号tablei和相应哈希桶的桶号bucket, 1≤i≤L。
(3.3)将所要查询的高维序列数据对象q的哈希表id和哈希桶id作为q的键值对的key 值,同时键值对的value值为高维序列数据对象q本身,键值对的最终形式为((tablei,bucket),q),1≤i≤L。
(3.4)将所要查询的高维序列数据对象q的键值对中key值即(tablei,bucket),作为输 入值,执行与步骤(2.6)相同的操作,使用BKDRHash函数计算得到一个哈希值,该哈希值 用来计算高维序列数据对象q的落入的哈希桶所处的分区的索引值。
(3.5)Driver进程利用步骤(2.6)得到的原始数据的分区索引值,将q发送给那些含有 由步骤(3.4)所计算出的分区索引值的分区的Worker节点。
(3.6)在步骤(3.5)中求得的Worker节点中,将所要查询的高维序列数据对象q与Worker 节点分区中含有的原始记录的id进行碰撞冲突组合。本实施例中,碰撞冲突组合具体的具体 步骤为:
(3.6.1)将所要查询的高维序列数据对象q和分区中包含的每一个原始记录的id进行组 合,作为key值。
(3.6.2)令每一条原始记录和所要查询的高维序列数据q的冲突统计,即整数1,作为 value值。
(3.6.3)将上述key值与value值,组合形成键值对,形式为((q,id),1)。
(3.7)聚合具有相同key值的数据集并统计次数,生成((q,id),count)键值对,其中count为所要查询的高维序列数据对象q与每一条记录的碰撞冲突总次数。
(3.8)将键值对((q,id),count)按照count值进行降序排序处理。
(3.9)对于所要查询的高维序列数据对象q的KNN查询,返回前k个结果,输出形式为((q,id),count),获得前k个记录的id并返回到Driver进程。
(3.10)Driver进程将这些id发送给Worker节点,Worker节点通过id在数据RDD中查 找相应的数据,并将结果返回。
本发明使用分布式集群Spark,利用Spark提供的内存计算和基于DAG的任务调度执行 机制等特性,通过拓展集群节点,提高提高计算能力;通过利用局部敏感哈希(LSH)函数 来构建索引,大大降低了高维序列数据所存在的数据量巨大和维度高等特性导致的数据处理 困难等问题;查询过程只在部分Worker节点中进行,大大降低了数据的处理量,并且通过碰 撞计数机制,有效的减少了候选集的规模,加速相似性查找的速率。本发明可以对用户任意 给出的一条高维序列数据对象,快速且准确的从大规模数据集中查找出大部分相似数据对象。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说, 在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发 明的保护范围。
Claims (6)
1.一种基于Spark的高维序列数据相似性查询方法,其特征在于:包括以下步骤:
步骤(1),将高维序列数据读入到Spark集群单元中进行数据预处理;
步骤(2),对预处理后的数据进行索引构建:
步骤(2.1),选取局部敏感哈希LSH哈希函数族,用于构建复合哈希函数gi,其步骤如下:
步骤(2.1.1),选取基于p-stable分布的LSH哈希函数族H,其哈希函数形式为其中,v是一个原始数据,a是一个与v同维度的随机向量集合,它的元素从p-stable分布中独立选取,w是窗口长度参数,b是从[0,w]中随机选取的实数,并且选择AND-OR组合进行复合哈希函数的构建;
步骤(2.1.4),而L个复合哈希函数之间采用OR操作构成;
步骤(2.2),Spark集群单元中的Driver进程使用预先设定的参数,来初始化复合哈希函数gi;
步骤(2.3),Spark集群单元中的每个Worker节点并行的构建哈希表RDD的子集,每个Worker节点中使用相同的参数构建哈希函数,生成L个哈希表;
步骤(2.4),通过复合哈希函数gi计算数据RDD中的每条记录的哈希值,该值作为该条记录落入哈希表i中的哈希桶的桶号,1≤i≤L;
步骤(2.5),将哈希表i的表号,记为tablei,每条记录在哈希表i中的哈希桶的桶号,记为bucketj,把tablei和bucketj进行组合,作为MapReduce过程的键值对中的key值,而该条记录的标识符id值作为键值对中的value值,最终的键值对的形式为((tablei,bucketij),id),1≤i≤L,1≤j≤k;
步骤(2.6),将每条记录的哈希表的表号tablei和哈希桶的桶号bucketij作为输入值,通过使用BKDRHash函数计算得到一个哈希值,该哈希值被使用来计算该条记录落入的哈希桶的分区索引值,即得出该哈希桶将位于哪个分区;
步骤(3),查询处理,具体包括以下子步骤:
步骤(3.1),Driver进程加载使用索引构造阶段中使用的所有参数和哈希函数,构建出相同的哈希表;
步骤(3.2),Driver进程按照与步骤(2.3)-(2.4)相同的操作,使用同样的参数和哈希函数,计算所要查询的高维序列数据对象q的哈希表的表号tablei和哈希桶的桶号bucketij,1≤i≤L,1≤j≤k;
步骤(3.3),将所要查询的高维序列数据对象q的哈希表的表号tablei和哈希桶的桶号bucketij作为q的键值对的key值,同时键值对的value值为高维序列数据对象q本身,键值对的最终形式为((tablei,bucketij),q),1≤i≤L,1≤j≤k;
步骤(3.4),将所要查询的高维序列数据对象q的键值对中key值即(tablei,bucketij),作为输入值,执行与步骤(2.6)相同的操作,使用BKDRHash函数计算得到一个哈希值,该哈希值用来计算高维序列数据对象q的落入的哈希桶所处的分区的索引值;
步骤(3.5),Driver进程利用步骤(2.6)得到的原始数据的分区索引值,将q发送给含有由步骤(3.4)所计算出的分区索引值的分区的Worker节点;
步骤(3.6),在步骤(3.5)中求得的Worker节点中,将所要查询的高维序列q与Worker节点分区中含有的原始记录的id进行碰撞冲突组合;
步骤(3.7),聚合具有相同key值的数据集并统计次数,生成((q,id),count)键值对,其中,count为所要查询的高维序列数据对象q与每一条记录的碰撞冲突总次数;
步骤(3.8),将键值对((q,id),count)按照count值进行降序排序处理;
步骤(3.9),对于所要查询的高维序列数据对象q的KNN查询,返回前k个结果,输出形式为((q,id),count),获得前k个记录的id并返回到Drive进程;
步骤(3.10),Driver进程将这些id发送给Worker节点,Worker节点通过id在数据RDD中查找相应的数据,并将结果返回。
2.根据权利要求1所述基于Spark的高维序列数据相似性查询方法,其特征在于:所述步骤(1)中进行数据预处理的方法如下:
步骤(1.1),将高维序列数据从数据库或HDFS读入Spark集群单元中;
步骤(1.2),依次读取Spark集群单元中的每条高维序列数据,并为每条高维序列数据设置唯一的标识符,记为id;
步骤(1.4),Spark集群单元中Driver进程根据读取的数据,得到数据RDD,并根据设置的分区数进行partition操作,各个Worker节点均含有一个或多个分区,其中分区中的每条记录是由一条高维序列数据的id值和数据本身所组成的一个键值对。
3.根据权利要求2所述基于Spark的高维序列数据相似性查询方法,其特征在于:步骤(2.2)中Driver进程使用预先设定的参数包括:高维序列数据的维度d,哈希表的数量L,哈希函数的个数k。
4.根据权利要求3所述基于Spark的高维序列数据相似性查询方法,其特征在于:步骤(2.6)中得出该哈希桶将位于哪个分区的方法包括以下步骤:
步骤(2.6.1),将每条记录的哈希表的表号tablei和哈希桶的桶号bucketij作为输入值,使用BKDRHash函数,计算得出一个哈希值,1≤i≤L,1≤j≤k,根据哈希值进行如下判断:
步骤(2.6.2),如果哈希值等于0,就将这条记录的分区索引值记为0;
步骤(2.6.3),否则就将哈希值对分区数取余数,同时对余数做如下判断:
步骤(2.6.3.1),如果余数大于零,则将余数作为该条记录的分区索引值;
步骤(2.6.3.2),如果余数小于零,则将余数加上分区数,然后将得到的数,作为该条记录的分区索引值;
步骤(2.7),每个Worker节点都在外存中存储所有的参数和哈希函数。
5.根据权利要求4所述基于Spark的高维序列数据相似性查询方法,其特征在于:步骤(3.6)中将所要查询的高维序列q与Worker节点分区中含有的原始记录的id进行碰撞冲突组合的方法:
步骤(3.6.1),将所要查询的高维序列数据对象q和分区中包含的每一个原始记录的id进行组合,作为key值;
步骤(3.6.2),令每一条原始记录和所要查询的高维序列数据对象q的冲突统计,即整数1,作为value值;
步骤(3.6.3),将上述key值与value值,组合形成键值对,形式为((q,id),1)。
6.一种采用权利要求1-5任一所述的基于Spark的高维序列数据相似性查询方法的查询系统,其特征在于:包括Spark集群单元、复合哈希函数gi单元,Spark集群单元包括相互连接的Driver Progarm模块、Cluster Manager模块以及Worker Node模块,DriverProgarm模块用于运行应用程序的main函数并且创建SparkContext的程序;ClusterManager模块负责整个集群的资源的管理和分配,作为Master节点;Worker Node模块是集群中的工作节点,负责运行应用程序代码;所述复合哈希函数gi单元分别与DriverProgarm模块、Cluster Manager模块以及Worker Node模块连接;所述Spark集群单元使用Master-Slaver模型,Master是集群单元中含有Master进程的节点,Slaver是集群单元中含有Worker进程的节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910963344.5A CN110795469B (zh) | 2019-10-11 | 2019-10-11 | 基于Spark的高维序列数据相似性查询方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910963344.5A CN110795469B (zh) | 2019-10-11 | 2019-10-11 | 基于Spark的高维序列数据相似性查询方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110795469A CN110795469A (zh) | 2020-02-14 |
CN110795469B true CN110795469B (zh) | 2022-02-22 |
Family
ID=69439122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910963344.5A Active CN110795469B (zh) | 2019-10-11 | 2019-10-11 | 基于Spark的高维序列数据相似性查询方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110795469B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112015797A (zh) * | 2020-08-31 | 2020-12-01 | 中国平安人寿保险股份有限公司 | 一种读取数据的方法及计算机设备 |
CN113761017A (zh) * | 2021-01-28 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 相似性搜索方法和装置 |
CN117131102B (zh) * | 2023-08-12 | 2024-04-05 | 安徽理工大学 | 一种在混合索引数据库中对相似时序数据高速检索的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035949A (zh) * | 2013-12-10 | 2014-09-10 | 南京信息工程大学 | 一种基于局部敏感哈希改进算法的相似性数据检索方法 |
CN107391554A (zh) * | 2017-06-07 | 2017-11-24 | 中国人民解放军国防科学技术大学 | 高效分布式局部敏感哈希方法 |
CN107656989A (zh) * | 2017-09-13 | 2018-02-02 | 华中科技大学 | 云存储系统中基于数据分布感知的近邻查询方法 |
CN108549696A (zh) * | 2018-04-16 | 2018-09-18 | 安徽工业大学 | 一种基于内存计算的时间序列数据相似性查询方法 |
CN110046176A (zh) * | 2019-04-28 | 2019-07-23 | 南京大学 | 一种基于Spark的大规模分布式DataFrame的查询方法 |
-
2019
- 2019-10-11 CN CN201910963344.5A patent/CN110795469B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035949A (zh) * | 2013-12-10 | 2014-09-10 | 南京信息工程大学 | 一种基于局部敏感哈希改进算法的相似性数据检索方法 |
CN107391554A (zh) * | 2017-06-07 | 2017-11-24 | 中国人民解放军国防科学技术大学 | 高效分布式局部敏感哈希方法 |
CN107656989A (zh) * | 2017-09-13 | 2018-02-02 | 华中科技大学 | 云存储系统中基于数据分布感知的近邻查询方法 |
CN108549696A (zh) * | 2018-04-16 | 2018-09-18 | 安徽工业大学 | 一种基于内存计算的时间序列数据相似性查询方法 |
CN110046176A (zh) * | 2019-04-28 | 2019-07-23 | 南京大学 | 一种基于Spark的大规模分布式DataFrame的查询方法 |
Non-Patent Citations (2)
Title |
---|
《基于Spark的时态查询扩展与时态索引优化研究》;周亮;《计算机工程》;20170731;第43卷(第7期);全文 * |
《大数据相似性连接查询技术研究进展》;马友忠;《计算机应用》;20180410(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110795469A (zh) | 2020-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mahmud et al. | A survey of data partitioning and sampling methods to support big data analysis | |
Chen et al. | A parallel random forest algorithm for big data in a spark cloud computing environment | |
Chen et al. | Xgboost: A scalable tree boosting system | |
Bei et al. | RFHOC: A random-forest approach to auto-tuning hadoop's configuration | |
CN110795469B (zh) | 基于Spark的高维序列数据相似性查询方法及系统 | |
US10579661B2 (en) | System and method for machine learning and classifying data | |
Yuan et al. | Fast iterative graph computation: A path centric approach | |
Chang et al. | Efficient pattern-based time series classification on GPU | |
Yagoubi et al. | Massively distributed time series indexing and querying | |
Wen et al. | Exploiting GPUs for efficient gradient boosting decision tree training | |
Eltabakh et al. | Eagle-eyed elephant: split-oriented indexing in Hadoop | |
CN106991141B (zh) | 一种基于深度剪枝策略的关联规则挖掘方法 | |
WO2016107497A1 (en) | Method and apparatus for scalable sorting of data set | |
Kraft et al. | Willump: A statistically-aware end-to-end optimizer for machine learning inference | |
Velentzas et al. | A partitioning gpu-based algorithm for processing the k nearest-neighbor query | |
Kassela et al. | General-purpose vs. specialized data analytics systems: A game of ML & SQL thrones | |
Peng et al. | Harpgbdt: Optimizing gradient boosting decision tree for parallel efficiency | |
US9317809B1 (en) | Highly scalable memory-efficient parallel LDA in a shared-nothing MPP database | |
CN108664662B (zh) | 时间旅行和时态聚合查询处理方法 | |
Velentzas et al. | GPU-aided edge computing for processing the k nearest-neighbor query on SSD-resident data | |
Trinks | A classification of real time analytics methods. an outlook for the use within the smart factory | |
Antaris et al. | In-memory stream indexing of massive and fast incoming multimedia content | |
Zhang et al. | Fast Vector Query Processing for Large Datasets Beyond {GPU} Memory with Reordered Pipelining | |
Lewis et al. | G-PICS: A framework for GPU-based spatial indexing and query processing | |
Perera et al. | Efficient approximate OLAP querying over time series |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |