1

假设我有一个名为df的DataFrame。我运行下面的命令来尝试它保存到本地:试图保存Spark SQL Dataframes总是在空目录中导致

df.coalesce(1). 
    write. 
    format("com.databricks.spark.csv"). 
    option("header", "true"). 
    parquet("example") 
} 

然而,当我这样做,去检查文件是否被创建(目录example,我看只有两个文件的目录:

_SUCCESS ._SUCCESS.crc

我怎样才能得到数据帧妥善保存该文件?

如果是重要的,我也是这样通过Jupyter笔记本电脑,所以本质上,当我在当地说,我的意思是我保存 在Jupyter Notebook服务器上,不在Spark运行的位置(我将Spark指向另一个主节点)。

回答

1

尝试用保存代替实木复合地板(因为我猜你想以CSV格式输出,而不是实木复合地板)

试试这个:

df.coalesce(1). 
    write. 
    format("com.databricks.spark.csv"). 
    option("header", "true"). 
    save("example") 
} 
+0

我曾经尝试过,如果标题在这种情况下有点误导,对不起。我也正在尝试实现紧凑的镶木地板。不幸的是,我仍然得到空目录。 –

+0

看看删除标题选项是否有帮助。我记得有时候csv格式的选项不能按预期工作。 –

3

事实证明,星火做所有文件操作通过Hadoop,它将在它运行的每个节点上创建一个目录的副本,并且运行该命令的节点将只保存它所拥有的数据部分。

您可以强制节点通过在DataFrame上使用“coalesce(1)”或“repartition(1)”来收集所有数据,但无法控制哪个节点接收单个分区。

结果是,没有数据集分区的节点(例如驱动程序)将只有一个“_SUCCESS”文件来显示操作成功。您应该在不同的任意节点上找到您的数据。

我自己还没有能够解决这个问题,但使用分布式文件系统(如HDFS)将是一个解决方案。

0

最简单的解决方案是在本地模式下运行spark。这将允许您在本地保存,但显然可能不是您想要的,因为您失去了在群集上运行的spark的主要优势。

最好的,合理的解决方案是保存到HDFS,然后将输出复制到本地目录。

相关问题