该应用程序包括
val stats = sqlContext.sql("select id, n from myTable")
stats.write.parquet("myTable.parquet")
这创建了dir 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)
如何让write.parquet
写出数据帧的实际内容?缺什么 ?
注意这也发生在saveAsTextFile
上。
就我而言,当我尝试将文件保存到本地文件系统而不是可从Spark集群访问的文件系统时,就会发生这种情况。
该文件由Spark工作节点编写,而不是由PySpark客户端编写,因此应将其输出到工作节点和客户端均可访问的文件系统。
一种可能是您查看了错误的目录。 Spark使用的默认文件系统由fs.defaultFS
Hadoop配置选项指定。例如,如果你有类似的东西
<property>
<name>fs.defaultFS</name>
<value>file:///tmp</value>
</property>
在你的core-site.xml
中,如果省略输出路径的URL方案,Spark会写入本地文件系统而不是HDFS。反之亦然,如果是的话
<property>
<name>fs.defaultFS</name>
<value>hdfs://some-host:9000</value>
</property>
Spark默认写入HDFS。