Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法将收集的RDD保存到驱动程序的本地文件系统_Python_Hadoop_Apache Spark_Hbase_Pyspark - Fatal编程技术网

Python 无法将收集的RDD保存到驱动程序的本地文件系统

Python 无法将收集的RDD保存到驱动程序的本地文件系统,python,hadoop,apache-spark,hbase,pyspark,Python,Hadoop,Apache Spark,Hbase,Pyspark,在对RDD调用collect()后,我试图保存它。我在主机1上调用spark submit(我假设驱动程序就是从中调用spark submit脚本的主机,所以在本例中,主机1就是驱动程序),从HBase获取一些数据,对其运行一些操作,然后在RDD上调用collect(),迭代收集的列表并将其保存到本地文件系统文件。实质上: if __name__ == "__main__": sc = SparkContext(appName="HBaseInputFormat") # read

在对RDD调用collect()后,我试图保存它。我在主机1上调用spark submit(我假设驱动程序就是从中调用spark submit脚本的主机,所以在本例中,主机1就是驱动程序),从HBase获取一些数据,对其运行一些操作,然后在RDD上调用collect(),迭代收集的列表并将其保存到本地文件系统文件。实质上:

if __name__ == "__main__":
    sc = SparkContext(appName="HBaseInputFormat")
    # read the data from hbase
    # ...
    # ...
    output = new_rdd.collect()

    with open("/var/tmp/tmpfile.csv", 'w') as tmpf:
        for o in output:
            print (o)
            tmpf.write("%s\n"%str(o))
    tmpf.close()
这实际上适用于保存在/var/tmp/tmpfile.csv中的数据,但数据保存在与驱动程序不同的主机上,比如主机3。 我的印象是collect总是在驱动程序主机上收集分布式数据集,因此文件也应该在驱动程序上创建。 我错在哪里

我假设驱动程序是从中调用spark submit脚本的主机,因此在本例中,主机1是驱动程序

这是不对的!请参阅上的文档

在纱线集群模式下,Spark驱动程序在应用程序主进程内运行,该主进程由集群上的纱线管理,客户端可以在启动应用程序后离开。在Thread客户端模式下,驱动程序在客户端进程中运行,而应用程序主机仅用于向Thread请求资源。

您可能正在纱线簇模式下运行spark,并且驱动程序被选择在簇内的一个节点上

将此更改为Thread client,驱动程序将在提交作业的节点上运行