2017-04-03 15 views
0

私は自分でスパークを学び始めているので、私の質問は本当にばかげているかもしれません。PySpark:ループ中の端末に印刷

とにかく、私は、Sparkのインストール(リンク:https://github.com/apache/spark/blob/master/examples/src/main/python/kmeans.py)によって提供された例に取り組んでいます

そして私はより良いマップ-減らす操作を理解する必要があるので、私は少しにコードを変更したいです。

私は何をしようとしていることである:

コマンドで

spark-submit 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() 

しかし、上記のプリントのどれも実際に印刷されていない代わりに、後に

ながら
print("Final centers: " + str(kPoints)) 

実際に端末に印刷されます。

理由を理解するのを助けることができる人はいますか?

答えて

0

closestpointStatsは両方ともrddですが、rddでprint文を実行すると、端末にはPythonRDD[36] at RDD at PythonRDD.scala:48のような文しか表示されません。

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

・ホープ、このことができます -

print(closest.collect()) 

文を kPointsがactiontakeSampleを使用して生成されるので、print("Final centers: " + str(kPoints))作品 - あなたのようRDDにactionを発行しない限り、その内容は印刷されません。 rddのアクションと変換操作の違いについては、さらに詳しくお読みください。

関連する問題