Apache spark 基于Spark的Levenshtein距离算法

Apache spark 基于Spark的Levenshtein距离算法,apache-spark,hadoop,batch-processing,levenshtein-distance,Apache Spark,Hadoop,Batch Processing,Levenshtein Distance,我从Hadoop生态系统开始,我面临一些问题,需要您的帮助 我有两个HDFS文件,需要在第一组列和第二组列之间执行Levenshtein distance 这一过程每天都会执行相当大的数据量(第一个文件中有1.5亿行,第二个文件中有1100万行) 如能提供一些指导(代码示例、参考资料等),指导我如何从HDFS中读取两个文件执行Levenshtein distance(使用Spark?),并将结果保存到第三个HDFS文件中,我将不胜感激 非常感谢您。我想您有csv文件,因此您可以直接读取数据帧:

我从Hadoop生态系统开始,我面临一些问题,需要您的帮助

我有两个HDFS文件,需要在第一组列和第二组列之间执行Levenshtein distance

这一过程每天都会执行相当大的数据量(第一个文件中有1.5亿行,第二个文件中有1100万行)

如能提供一些指导(代码示例、参考资料等),指导我如何从HDFS中读取两个文件执行Levenshtein distance(使用Spark?),并将结果保存到第三个HDFS文件中,我将不胜感激


非常感谢您。

我想您有csv文件,因此您可以直接读取数据帧:

val df1 =  spark.read.option("header","true").csv("hdfs:///pathtoyourfile_1")

spark.sql.functions
module conatins
deflevenshtein(l:Column,r:Column):Column
函数,因此您需要作为参数-dataframe列传递字符串类型,如果您想传递一组列,可以采用
concat('col1,'col2,…)
函数连接多个列并将它们传递给上一个函数。如果有2个或更多数据帧,则必须将它们合并到一个数据帧中,然后执行距离计算。最后,您可以使用
df.write.csv(“路径”)

将结果保存到csv,非常感谢您提供了这种有趣的方法。如果出现concat列,Levenshtein算法将受到怎样的影响?因为在第一个文件中,我有一列包含客户名称(名字和姓氏以任何顺序排列),而在第二个文件中,我需要将名字和姓氏合并以构建相同的客户名称,但根据顺序,Levenshtein算法将获得不同的分数?如果是,我如何防止这种情况?提前谢谢你!如果您不知道哪个值是名字/姓氏,您可以将它们合并并按字母顺序排序,然后计算距离,例如
split
将创建字符数组,然后
array\u sort
将对数组进行排序,
array\u join
将创建单个排序字符串
array\u join(array\u sort(split('value,”),“”)
所以“John | Smith”=>“JShhimnot”很棒!谢谢。最后一个问题,实际上我没有任何键来连接这两个文件,它们都来自不同的源系统,没有公共键,目标是解析它们,并尝试计算第一个文件中的所有条目与第二个文件中的所有行之间的相似性。如果没有公共键,我如何创建单个数据帧?您可以将id列添加到两个数据帧中,并使用它连接它们
df.coalesce(1)。使用列(“idx”,monoticallyincreasingid())
您应该使用
coalesce(1)
来保持行的顺序,否则spark可能会混合行顺序,更多