火花警告"tid未释放块锁"导致性能不佳

Ach*_*les 7 performance warnings locking take apache-spark

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

首先,我拿一个项目.任何项目都可以

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

然后我创建一个对象,它将根据我刚找到的选定项找到我的集群的候选项.为了记录,它实现了PairFlatMapFunction

        NCPComparator comp = new NCPComparator(meta, selected);
Run Code Online (Sandbox Code Playgroud)

下一步找到一些候选人

        JavaPairRDD<Long, Double> candidates = this.dataset.mapPartitionsToPair(comp);
Run Code Online (Sandbox Code Playgroud)

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

        List<Tuple2<Long, Double>> groupList = candidates.takeOrdered(k, new TupleComparator());
Run Code Online (Sandbox Code Playgroud)

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

而且,我在我的rdds上做了适当的坚持.乔布斯似乎像一个魅力.我发现很多人都有这个问题,但没有答案.

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