将 DataFrame 编写为镶木地板会创建空文件

Writing DataFrame as parquet creates empty files

我正在尝试使用 bucketing 技术对 Spark 作业进行一些性能优化。我正在阅读 .parquet.csv 文件并进行一些转换。在我进行分桶并加入两个 DataFrame 之后。然后我正在将 joined DF 写入镶木地板,但我有一个空文件 ~500B 而不是 500Mb.

当我在命令行中使用 ssh 启动 Spark 作业时,我得到了正确的结果,~500Mb 我可以使用 Hive 看到的镶木地板文件。如果我 运行 使用 oozie 工作流的相同作业,我有一个空文件 (~500 Bytes)。 当我在 resultDF 上执行 .show() 时,我可以看到数据,但我的镶木地板文件是空的。

+-----------+---------------+----------+
|       col1|          col2 |      col3|
+-----------+---------------+----------+
|33601234567|208012345678910|       LOL|
|33601234567|208012345678910|       LOL|
|33601234567|208012345678910|       LOL|

当我没有将数据保存为 table 时,写入 parquet 没有问题。它仅发生在从 table.

创建的 DF 中

有什么建议吗?

提前感谢您的任何想法!

我想出了我的案例,我只是添加了一个选项 .option("path", "/sources/tmp_files_path")。现在我可以使用分桶并且我的输出文件中有数据。

readParquet
  .write
  .option("path", "/sources/tmp_files_path")
  .mode(SaveMode.Overwrite)
  .bucketBy(23, "column")
  .sortBy("column")
  .saveAsTable("bucketedTable1")