Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Scala 试图保存Spark SQL数据帧时,总是导致目录为空_Scala_Apache Spark_Dataframe_Apache Spark Sql_Jupyter Notebook - Fatal编程技术网

Scala 试图保存Spark SQL数据帧时,总是导致目录为空

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的数据帧。我运行以下命令尝试将其保存到本地:

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格式的选项并不像预期的那样工作。