首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用排序找到行,请在LSH之后写入

无法使用排序找到行,请在LSH之后写入
EN

Stack Overflow用户
提问于 2017-10-24 19:59:45
回答 1查看 151关注 0票数 0

我在使用pyspark的ALS算法之后使用了LSH,一切似乎都很好,直到我在探索过程中意外地发现我有一些丢失的行。所有这些都是在Spark LSH文档示例https://spark.apache.org/docs/latest/ml-features.html#tab_scala_28的帮助下实现的

当我专门尝试查找idA == 1所在的行时,我可以做到。当我重新分区(1)时,.write.csv或idA --> ==为1的所有行都不在表中。有人能解释一下这是怎么回事吗?

我已经使用了python API for Spark版本v2.2.0,python版本是3.6

一点代码

代码语言:javascript
复制
brp = BucketedRandomProjectionLSH(inputCol="features", outputCol="hashes",
                                    bucketLength=10.0, numHashTables=3)
table = model.approxSimilarityJoin(Pred_Factors, Pred_Factors, threshold=10.0, distCol="EuclideanDistance") \
            .select(col("datasetA.id").alias("idA"),
                    col("datasetB.id").alias("idB"),
                    col("EuclideanDistance")).cache()

附言:我甚至尝试过将文件写入csv并搜索这些id和EuclidianDistance -正如你所看到的,这都是不成功的。这些丢失的id确实太多了(不仅仅是id= 1)。也许我不了解LSH算法的一些细节,但我自己找不到spark LSH行为的逻辑。

EN

回答 1

Stack Overflow用户

发布于 2017-10-24 20:40:32

在这里,你使用了随机分区,因此你就有了问题。所以现在你必须使用partitionBy(('idA'),否则你可以使用table.orderBy('idA')来获得正确的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46910016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档