Pyspark-对一组不同的对使用approxSimilarityJoin
我正在使用Pyspark并试图计算两个数据帧中向量之间的Jaccard相似性。为此,我可以使用approxSimilarityJoin来计算距离,然后从1.0中减去。通过使用approxSimilarityJoin,它计算每对的距离。因为我只对2个数据帧中的匹配之间的距离感兴趣,所以我生成了大量冗余数据,当我使用大型数据集时,这些数据会导致代码失败 有谁能推荐一种只计算两个数据帧中定义的一组对之间的approxSimilarityJoin的方法吗 我使用的代码如下:Pyspark-对一组不同的对使用approxSimilarityJoin,pyspark,Pyspark,我正在使用Pyspark并试图计算两个数据帧中向量之间的Jaccard相似性。为此,我可以使用approxSimilarityJoin来计算距离,然后从1.0中减去。通过使用approxSimilarityJoin,它计算每对的距离。因为我只对2个数据帧中的匹配之间的距离感兴趣,所以我生成了大量冗余数据,当我使用大型数据集时,这些数据会导致代码失败 有谁能推荐一种只计算两个数据帧中定义的一组对之间的approxSimilarityJoin的方法吗 我使用的代码如下: # build the mo
# build the model pipeline and fit it to the dataset
jacc_model = Pipeline(stages=[RegexTokenizer(
pattern="", inputCol="jacc_var", outputCol="tokens", minTokenLength=1),
HashingTF(inputCol="tokens", outputCol="raw_vectors"),
IDF(inputCol="raw_vectors", outputCol="vectors"),
MinHashLSH(inputCol="vectors", outputCol="lsh")
]).fit(jacc_var_1)
# hash the data using the model
jacc_var_1_hashed = jacc_model.transform(jacc_var_1).select(Unique_ID,'vectors','lsh')
jacc_var_2_hashed = jacc_model.transform(jacc_var_2).select(Unique_ID,'vectors','lsh')
# generate results and isolating the pairs I need
jacc_model_results = jacc_model.stages[-1].approxSimilarityJoin(jacc_var_1_hashed, jacc_var_2_hashed,jacc_threshold)\
.select(F.col("datasetA."+Unique_ID).alias(Unique_ID),
F.col("datasetB."+Unique_ID).alias('Unique_ID_B'),
F.col('distCol')
).withColumn('direct_ID_comparison', F.col(Unique_ID) == F.col('Unique_ID_B'))\
.where(F.col('direct_ID_comparison') == True)\
.withColumn('Jaccard_Similarity_Name', F.round((1.0 - F.col('distCol')),2))\
.select(Unique_ID, 'Jaccard_Similarity_Name')