这是这里的后续问题。我正试图在这个实现的基础上实现k-means。它工作得很好,但我想用reduceByKey()
替换groupByKey()
,但我不确定如何替换(我现在不担心性能)。以下是相关的简化代码:
val data = sc.textFile("dense.txt").map(
t => (t.split("#")(0), parseVector(t.split("#")(1)))).cache()
val read_mean_centroids = sc.textFile("centroids.txt").map(
t => (t.split("#")(0), parseVector(t.split("#")(1))))
var centroids = read_mean_centroids.takeSample(false, K, 42).map(x => x._2)
do {
var closest = read_mean_centroids.map(p => (closestPoint(p._2, centroids), p._2))
var pointsGroup = closest.groupByKey() // <-- THE VICTIM :)
var newCentroids = pointsGroup.mapValues(ps => average(ps.toSeq)).collectAsMap()
..
请注意,println(newCentroids)
将给出:
地图(23)-
和println(最接近的)
:
在地图kmeans.scala:75
相关问题:在ApacheSpark(Scala)中使用reduceByKey。
一些文件:
DEF还原ByKey(func:(V, V)0020 V): RDD[(K, V)]
使用关联减少函数合并每个关键点的值。
DEF减少ByKey(func:(V, V)0020 V, Num分区: Int): RDD[(K, V)]
使用关联减少函数合并每个关键点的值。
def reduceByKey(partitioner:partitioner,func:(V,V)⇒ 五) :RDD[(K,V)]
使用关联减少函数合并每个关键点的值。
def groupByKey():RDD[(K,Iterable[V])]
将RDD中每个键的值分组为单个序列。
你可以像这样使用一个aggregateByKey()
(比reduceebykey()
自然一点)来计算新的质心
:
val newCentroids = closest.aggregateByKey((Vector.zeros(dim), 0L))(
(agg, v) => (agg._1 += v, agg._2 + 1L),
(agg1, agg2) => (agg1._1 += agg2._1, agg1._2 + agg2._2)
).mapValues(agg => agg._1/agg._2).collectAsMap
为此,您需要计算数据的维度,即dim
,但只需计算一次。您可能会使用类似于val dim=data的东西。首先_2.长度
。
你好,我经常需要在代码中使用,但我知道这是一个非常繁重的操作。由于我正在努力提高性能,我想知道删除所有调用的方法是否有效。 我使用的是,但是由于这种方法对于大型数据集可能会有很大的问题,所以我想使用这个解决方案: 我所做的不是创建类型对(Int,Int)的RDD,而是创建类型对(Int,list[Int]),所以我的如下所示 你认为有没有更快的方法来达到同样的结果,使用一些其他的方法?谢谢你。
我使用的是Spark 1.5/1.6,我想在DataFrame中执行reduceByKey操作,我不想将df转换为rdd。 每行看起来像,我有多行id1。 我想有这样的东西: 所以,对于每个“id1”,我希望所有记录都列在一个列表中 顺便说一句,我不想将df转换为rdd的原因是,我必须将这个(减少的)数据帧连接到另一个数据帧,并且我正在对连接键进行重新分区,这使得它更快,我想rdd也不能这样做 任
问题内容: 假设我的格式如下: 我想将小数点替换为空白,使其看起来像这样: 我该怎么做呢?我以为可以解决问题,但是当我尝试这样时: 我收到了一个错误消息,因为它可能不是字符。那是有道理的,那么我还能怎么完成我想要的? 问题答案: 如果您只是将单引号换成双引号,那么这将起作用,因为空字符串是合法值,而不是“空字符”,并且有重载。请记住,这是的超类型。
问题内容: 我正在使用UpdatePanel在页面中异步调用按钮单击事件,该页面调用另一个类中的方法,该方法在输出中写出XML文件。有没有办法用JQuery而不是UpdatePanel做到这一点? 问题答案: 使用jQuery处理click事件。然后,使用此技术在后台代码中调用page方法。在这里,您可以编写XML文件或执行其他任何操作。
问题内容: 我是一名工程专业的学生,我必须做大量的数值处理,绘图,模拟等工作。我目前使用的工具是Matlab。我在大多数作业中都用它在大学计算机中。但是,我想知道有哪些可用的免费选项。 我已经做过一些研究,许多人说python在各种情况下都可以替代matlab。我想知道如何用python做所有这些事情。我正在使用Mac,如何安装不同的python软件包。那些包是什么?这真的是可行的选择吗?使用
我想用getMapAsync替换不推荐的getMap方法,但我没有使用MapFragment方法,而是使用GoogleMap方法,如下所示: 如果我像这样将googleMap替换为MapFragment,我将无法再设置映射类型,等等。那么,在我的情况下,如何更改为getMapAsync?