Scala 试图保存Spark SQL数据帧时,总是导致目录为空
假设我有一个名为df的数据帧。我运行以下命令尝试将其保存到本地:Scala 试图保存Spark SQL数据帧时,总是导致目录为空,scala,apache-spark,dataframe,apache-spark-sql,jupyter-notebook,Scala,Apache Spark,Dataframe,Apache Spark Sql,Jupyter Notebook,假设我有一个名为df的数据帧。我运行以下命令尝试将其保存到本地: df.coalesce(1). write. format("com.databricks.spark.csv"). option("header", "true"). parquet("example") } 但是,当我执行此操作并检查文件是否在目录示例中创建时,我看到一个目录只有两个文件: _成功 如何获取数据帧以正确保存文件 如果这很重要,我也是通过Jupyter笔记本来实现的,所以基本上,当我说本
df.coalesce(1).
write.
format("com.databricks.spark.csv").
option("header", "true").
parquet("example")
}
但是,当我执行此操作并检查文件是否在目录示例中创建时,我看到一个目录只有两个文件:
_成功
如何获取数据帧以正确保存文件
如果这很重要,我也是通过Jupyter笔记本来实现的,所以基本上,当我说本地时,我的意思是我把它保存在Jupyter笔记本服务器上,而不是Spark运行的地方,我让Spark指向另一个主节点。尝试用save替换拼花,因为我猜你想要的是csv格式的输出,而不是拼花 试试这个:
df.coalesce(1).
write.
format("com.databricks.spark.csv").
option("header", "true").
save("example")
}
尝试用save替换parquet,因为我猜您希望输出为csv格式,而不是parquet 试试这个:
df.coalesce(1).
write.
format("com.databricks.spark.csv").
option("header", "true").
save("example")
}
事实证明,Spark通过Hadoop执行所有文件操作,它将在运行的每个节点上复制目录,而运行该命令的节点将只保存其拥有的部分数据 您可以通过在数据帧上使用coalesce1或repartition1强制节点收集所有数据,但您无法控制哪个节点接收单个分区 结果是,没有数据集分区的节点(如驱动程序)将只有一个_成功文件来显示操作成功。您应该发现数据位于不同的任意节点上
我自己还不能解决这个问题,但使用分布式文件系统(如HDFS)将是一个解决方案。事实证明,Spark通过Hadoop执行所有文件操作,它将在运行的每个节点上复制目录,而运行该命令的节点将只保存其拥有的部分数据 您可以通过在数据帧上使用coalesce1或repartition1强制节点收集所有数据,但您无法控制哪个节点接收单个分区 结果是,没有数据集分区的节点(如驱动程序)将只有一个_成功文件来显示操作成功。您应该发现数据位于不同的任意节点上
我自己还不能解决这个问题,但使用分布式文件系统(如HDFS)将是一个解决方案。最简单的解决方案是在本地模式下运行spark。这将允许您在本地进行保存,但显然这并不是您想要的,因为您失去了在集群上运行spark的主要优势
最好、合理的解决方案是保存到HDFS,然后将输出复制到本地目录。最简单的解决方案是在本地模式下运行spark。这将允许您在本地进行保存,但显然这并不是您想要的,因为您失去了在集群上运行spark的主要优势
最好、合理的解决方案是保存到HDFS,然后从那里将输出复制到本地目录。我以前确实尝试过,如果标题在这种情况下有点误导,是的,很抱歉。我还试着用拼花地板来达到紧凑的效果。很遗憾,我仍然得到空目录。请查看删除标题选项是否有帮助。我记得有时候csv格式的选项不能像预期的那样工作。我以前也试过,如果标题有点误导的话,是的,很抱歉。我还试着用拼花地板来达到紧凑的效果。很遗憾,我仍然得到空目录。请查看删除标题选项是否有帮助。我记得有时候csv格式的选项并不像预期的那样工作。