Spark write parquet 不写任何文件,只写_SUCCESS

ech*_*cho 5 python scala apache-spark parquet spark-dataframe

该应用程序包括

val stats = sqlContext.sql("select id, n from myTable")

stats.write.parquet("myTable.parquet")
Run Code Online (Sandbox Code Playgroud)

这将创建myTable.parquet除了空_SUCCESS文件之外没有任何内容的目录,即使是

stats.show  // illustration only here, original size motivates parquet use

+-----+----+
|  id |  n |
+-----+----+
|   a |  1 |
|   b |  2 |
+-----+----+

stats.printSchema 

root
 |-- id: string (nullable = true)
 |-- n: long (nullable = true)
Run Code Online (Sandbox Code Playgroud)

如何write.parquet编写数据帧的实际内容?有什么不见了 ?

注意这也会发生在saveAsTextFile.

ost*_*ach 7

就我而言,当我尝试将文件保存到本地文件系统而不是可从 Spark 集群访问的文件系统时,就会发生这种情况。

该文件由 Spark 工作节点写入,而不是由 PySpark 客户端写入,因此应将其输出到工作节点和客户端均可访问的文件系统。


Che*_*ian 1

一种可能是您查看了错误的目录。Spark 使用的默认文件系统由 Hadoop 配置选项指定fs.defaultFS。例如,如果你有类似的东西

<property>
  <name>fs.defaultFS</name>
  <value>file:///tmp</value>
</property>
Run Code Online (Sandbox Code Playgroud)

在您的 中core-site.xml,如果您省略输出路径的 URL 方案,则 Spark 会写入您的本地文件系统而不是 HDFS。反之亦然,如果是

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://some-host:9000</value>
</property>
Run Code Online (Sandbox Code Playgroud)

Spark 默认写入 HDFS。