2017-04-03 98 views
0

我开始自己学习Spark,所以我的问题可能非常愚蠢。PySpark:在循环内打印到终端

不管怎么说,我正在通过星火安装(链接:https://github.com/apache/spark/blob/master/examples/src/main/python/kmeans.py)提供了一个示例

我要修改一点点的代码,因为我需要更好地了解地图,减少操作。

我试图做的是:

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

closestpointStats,都是RDDS,当你做对RDDS打印语句,你只能看到类似的语句在PythonRDD[36] at RDD at PythonRDD.scala:48终端打印。其内容将不会打印,除非你在RDD像发出action -

print(closest.collect()) 

声明print("Final centers: " + str(kPoints))作品,因为 kPoints使用actiontakeSample生成 -

kPoints = data.takeSample(False, K, 1) 

希望这有助于。请阅读更多关于rdds的操作和转换操作之间的区别。