我自己开始学习Spark,所以我的问题可能真的很傻。
无论如何,我正在研究Spark安装提供的示例(链接:https://github.com/apache/spark/blob/master/examples/src/main/python/kmeans.py)
我想稍微修改一下代码,因为我需要更好地理解map-reduce操作。
我想做的是:
while tempDist > convergeDist:
print('Here \n')
closest = data.map(
lambda p: (closestPoint(p, kPoints), (p, 1)))
print(closest)
pointStats = closest.reduceByKey(
lambda p1_c1, p2_c2: (p1_c1[0] + p2_c2[0], p1_c1[1] + p2_c2[1]))
print(pointStats)
newPoints = pointStats.map(
lambda st: (st[0], st[1][0] / st[1][1])).collect()
但是,使用命令
执行脚本时,实际上并未打印上述打印件 spark-submit kmeans.py
而不是稍后
print("Final centers: " + str(kPoints))
实际上是打印到终端。
有人可以帮助我理解为什么吗?
答案 0 :(得分:0)
closest
和pointStats
都是rdds,当你在rdds上打印语句时,你只能在终端上看到像PythonRDD[36] at RDD at PythonRDD.scala:48
这样的语句。除非您在rdd上发布action
-
print(closest.collect())
声明print("Final centers: " + str(kPoints))
有效,因为
kPoints是使用action
takeSample
-
kPoints = data.takeSample(False, K, 1)
希望这会有所帮助。请阅读有关rdds的操作和转换操作之间差异的更多信息。