2016-09-03 3 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

На первый взгляд нет ничего особенного (вы должны менеджер контекста, в случае, как это вместо того, чтобы вручную закрыть, но это не точка) неправильно с вашим кодом , Если этот скрипт передан в spark-submit, файл будет записан в каталог, локальный для кода драйвера.

Если вы отправляете свой код в режиме кластера, он будет произвольным рабочим узлом в вашем кластере. Если вы сомневаетесь, вы всегда можете регистрировать os.getcwd() и socket.gethostname(), чтобы выяснить, какая машина используется и что является рабочим каталогом.

Наконец, вы не можете использовать стандартные инструменты ввода-вывода Python для записи в 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