繁体   English   中英

Spark 2 中是否有没有交叉连接的替代解决方案?

[英]Are there alternative solution without cross-join in Spark 2?

堆栈溢出!

不知道Spark 2.0有没有什么奇特的方法来解决下面的情况。 情况是这样的。

数据集 1 (TargetData) 具有此架构并且有大约 2000 万条记录。

  • id(字符串)
  • 嵌入结果向量(数组,300 暗)

Dataset2 (DictionaryData) 有这个模式并且有大约 9,000 条记录。

  • 字典键(字符串)
  • 嵌入结果向量(数组,300 暗)

对于数据集 1 中的每个记录向量,我想找到当我计算它与数据集 2 的余弦相似度时最大的字典键。

最初,我尝试交叉连接 dataset1 和 dataset2 并计算所有记录的余弦相似度,但数据量太大,无法在我的环境中使用。

我还没有尝试过,但我想到了将 dataset2 收集为一个列表,然后应用 udf。

在这种情况下还有其他方法吗? 谢谢,

可能有两种选择,一种是广播Dataset2,因为您需要为 Dataset1 的每一行扫描它,从而通过从不同节点访问它来避免网络延迟。 当然,在这种情况下,您首先需要考虑您的集群是否可以处理 9000 行 x 300 列的内存成本(我认为不是太大)。 此外,您仍然需要加入,尽管广播应该更快。 另一种选择是从您现有的向量中填充RowMatrix并让 spark 为您进行计算

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM