2017-04-03 97 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的操作和轉換操作之間的區別。