7

我正在学习火花。我正在尝试演示一个简单的聚类算法。假设我在我的 rdd 上找到 k 项代表我的集群。问题是当我尝试将它们带到驱动程序时,我收到一条警告说“块锁未被 tid 释放”。这也会导致性能不佳......下面代码的 20 次迭代需要 11 秒,在 4 核上使用 2mb 数据集。这比我的串行版本差得多。好消息是我仍然得到正确的结果。请看一下:

首先,我拿一个项目。任何物品都可以

List<Tuple2<Long, Instance>> selectedTuple = dataset.take(1);
        Instance selected = selectedTuple.get(0)._2;

然后我创建一个对象,该对象将根据我刚刚找到的所选项目为我的集群查找候选项目。作为记录,它实现了 PairFlatMapFunction

        NCPComparator comp = new NCPComparator(meta, selected);

下一步找到一些候选人

        JavaPairRDD<Long, Double> candidates = this.dataset.mapPartitionsToPair(comp);

但是现在,我需要具有最低 Double 值的 k 个,所以我实现了一个 TupleComparator。然后我调用了 takeOrdered

        List<Tuple2<Long, Double>> groupList = candidates.takeOrdered(k, new TupleComparator());

此时,出现该警告。调用 top() 也是如此。并且作为一种迭代算法,它出现在每次迭代中。我不会向您展示其余的代码。你猜对了..这不仅仅是微不足道的:-)

另外,我确实坚持我的rdds。乔布斯的工作似乎很有魅力。我发现很多人都有这个问题,但没有答案。

我希望我给了你足够的细节,这是我的第一篇文章!

4

0 回答 0