python - 将两个 float 写入常规 txt 的正确方法

标签 python apache-spark io distributed-computing bigdata

我正在集群模式下运行一项大型作业。但是,我只对两个 float 感兴趣,当工作成功时,我想以某种方式读取它们。

这是我正在尝试的:

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。有一些工具可以实现这一点,包括 native dask/hdfs3 .

关于python - 将两个 float 写入常规 txt 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303218/

相关文章:

python - 终结器方法被调用多少次和僵尸(PEP 442)

python - mypy: "__eq__"与父类(super class)型 "object"不兼容

hadoop - Apache Zeppelin 能否在一段时间后自动关闭其 SparkContext 并重新打开它?

C++ 写入选项

python - 如何用另一个函数装饰 matplotlib 图

python - 如何将 .txt 文件中的列表转换为 python 文件中的列表?

java - 尝试在 Spark DataFrame 上使用 map

scala - Spark 中的 java.util.concurrent.RejectedExecutionException 尽管驱动程序/客户端与服务器具有完全相同的版本

c - C 中的基本 I/O——程序选择随机整数而不是询问用户

python - 文件 i/o 和二进制模式的含义