2016-09-03 36 views
2

我正在集羣模式下運行一個很大的工作。但是,我只對兩個浮動數字感興趣,我希望在工作成功時以某種方式閱讀。將兩個浮動塊寫入常規txt的正確方法

這裏我想做:

from pyspark.context import SparkContext 

if __name__ == "__main__": 
    sc = SparkContext(appName='foo') 

    f = open('foo.txt', 'w') 
    pi = 3.14 
    not_pi = 2.79 
    f.write(str(pi) + "\n") 
    f.write(str(not_pi) + "\n") 
    f.close() 

    sc.stop() 

然而,「foo.txt的」不會出現在任何地方寫的(可能它被寫在遺囑執行人,或東西)。我嘗試了'/homes/gsamaras/foo.txt',這將是網關的pwd。但是,它說:No such file or directory: '/homes/gsamaras/myfile.txt'

如何做到這一點?


import os, sys 
import socket 
print "Current working dir : %s" % os.getcwd() 
print(socket.gethostname()) 

表明,司機居然是羣集的節點,這就是爲什麼我沒有看到我的網關文件。

也許以某種方式在HDFS中寫入文件?

這也不行:

Traceback (most recent call last): 
    File "computeCostAndUnbalancedFactorkMeans.py", line 15, in <module> 
    f = open('hdfs://myfile.txt','w') 
IOError: [Errno 2] No such file or directory: 'hdfs://myfile.txt' 
+0

也許'/homes/gsamaras/foo.txt',你錯過了主要的斜線。 – citaret

+1

這看起來很好,應該寫在驅動程序節點上。如果您不確定,只需登錄'os.getcwd()'和'socket.gethostname()'。 – zero323

+0

citaret,錯字! :) @ zero323原來我的網關不是我的驅動程序,這就是爲什麼這不起作用..看我的編輯! – gsamaras

回答

1

乍看之下並沒有什麼特別的(你應該上下文管理器的情況下,像這樣的,而不是手動關閉,但它不是點),你的代碼錯誤。如果將此腳本傳遞給​​文件將被寫入到驅動程序代碼的本地目錄中。

如果以集羣模式提交代碼,它將成爲集羣中的任意工作者節點。如果你有疑問,你總是可以登錄os.getcwd()socket.gethostname()找出使用哪臺機器以及什麼是工作目錄。

最後,您不能使用標準Python IO工具寫入HDFS。有幾個工具可以實現,包括原生dask/hdfs3

+0

謝謝zero323。順便說一句,你可以看看,也許接受我的[主題請求](http://stackoverflow.com/documentation/apache-spark)爲Spark?你看,這[答案](http://meta.stackoverflow.com/questions/332668/did-i-just-lose-my-hard-worked-newly-created-topic)有我寫回的所有東西然後,隱藏在編輯部分! :) – gsamaras

+0

說實話,我避免了文檔,如果可以的話,我真的沒有那麼多的權力。我可以刪除主題,但要創建主題,我必須添加自己的示例。 – zero323

+1

你呢?好。所以看起來我可以批准。我不確定爲什麼我們需要Spark文檔,但是在這裏。 – zero323