记录两两相比问题

2024-06-15 16:58
文章标签 问题 记录 相比

本文主要是介绍记录两两相比问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2020/07/05 -
刚刚就在思考,如果是利用spark或者hadoop的运算框架,来强行计算大量数据的两两相似度,应该怎么来编写呢?我想了一会,就感觉好像没有办法嵌入到这个模型中,这就比较困难了。

在百度上搜索这部分东西,然后看到了回答[1],感觉应该是有相关的框架;然后普遍的回答都是利用LSH,然后分桶,然后计算小部分的,而不是说全部的。这里这个分桶是什么意思呢?不太理解。


回到上面这个问题,假设我先使用spark来实现,不考虑这个性能问题,就考虑这个东西应该怎么编程实现。
本身这个问题呢,我自己在实现的时候,就是如果不用大数据平台,我就是按照双循环的形式直接来进行比较。

for i in range (n):for j in range(i+1,n):

我是怎么也想不出来这个东西怎么弄,这个时候应该看看我知道什么他具备哪些基础操作,也就是原子操作。本质上,这种操作形式属于两个RDD的交叉工作。在RDD上好像是没有那种按照索引来选定元素的方式。

想不出来,哈哈哈哈哈哈哈,日了狗了。。

这么看来,就感觉就好像mapreduce这种模型并不是适用于这种计算,看来得进行转化了。


我来简单阐述一下我通过查找资料学习到的东西。

首先,直接搜索pair similar spark,首先找到的是一个ppt(这个ppt放在spark的同级目录下),ppt中含有一个All-pairs similarity compution。注意,这里他给出了一个形式化的描述,这一点是我没想到的。


问题的形式化描述

第一点,矩阵,这一点很重要,就是要把问题转化为数学问题。(但我感觉其实还是一个编程的问题,因为这个时候我没有想着去弄什么性能的优化,我只是想得到一个可行的编程方案)
然后就是矩阵的特点,属于行多列少,而且远大于;属于稀疏矩阵;这个矩阵不能存在与单个机器的内存。

我觉得这里面,矩阵的这个概念很重要,我记得当时最开始学习《海量数据挖掘》的时候,就有将矩阵运算转化为mapreduce的过程,这样的话,匹配前面的过程,前面寻找框架的时候,所以说,我还是没有将问题转化好。

mapreduce编程方式

普通的方式就是利用mapreduce的形式,通过矩阵运算来实现这个整体相似度的计算。这个过程的话,其实就跟前面提到的矩阵运算是一致的。这里比较关键的是他的这个转化过程。

然后还有这个文章[2],他其实就是介绍了PPT后面的算法,就是某种逼近相似度?然后将这个东西引入到了spark中。他这里呢,将这个概念更明确了,本身叫做全对相似度比较,(all-pairs similarity),又是也被叫做similarity join问题。

然后按照这个关键词,我找到了文章[3],他是来讲解文本的相似度比较问题的,但是说实话,我没弄懂他是怎么做的。但是,他这里有一个ID,这个应该是很重要的,这个是能够标识的。我觉得,他好像是使用了那种TF-IDF的样子一样,这个再仔细看看。


总结一下

实际上,这篇文章并没有给出具体的方案,但是我有点知道了到底应该怎么办。就是通过矩阵的方式,但是这里需要一个实体的ID来标识。
然后,实际上在业界更多的是进行那种大致相似,以及topk近邻的问题。这些在spark中都有涉及。

[1]Spark 千万级用户相似度计算?
[2]efficient-similarity-algorithm-now-in-spark-twitter.html
[3]similarity-join-spark/

这篇关于记录两两相比问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064038

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py