将两个浮点数写入常规 txt 的正确方法

Correct way of writing two floats into a regular 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'

乍一看你的代码没有什么特别的错误(在这种情况下你应该使用上下文管理器而不是手动关闭但这不是重点)。如果这个脚本被传递给 spark-submit 文件将被写入驱动程序代码的本地目录。

如果您在集群模式下提交代码,它将是集群中的任意一个工作节点。如果您有疑问,您可以随时登录 os.getcwd()socket.gethostname() 来确定使用的是哪台机器以及工作目录是什么。

最后,您不能使用标准 Python IO 工具写入 HDFS。有一些工具可以实现这一点,包括原生 dask/hdfs3.