如何在路径中没有分区前缀的情况下写出分区的DataFrame?

Art*_*iev 3 scala apache-spark apache-spark-sql

我有代码:

dataFrame.write
  .partitionBy("format", "dataset", "year", "month", "day", "hour")
  .format(outputFormat)
  .mode("overwrite")
  .save(outputPath)
Run Code Online (Sandbox Code Playgroud)

给出如下输出: 在此处输入图片说明

如何编写没有前缀的数据帧?不重命名。有没有办法通过 Spark 或 hadoop 配置来做到这一点?目前我正在使用单独的 bash 脚本来重命名文件夹。

明确地说,我想使用 Spark 代码获得下一个结构:

data
-+parquet
   +main
     +2017
        +01
         +31
           +15
Run Code Online (Sandbox Code Playgroud)

T. *_*ęda 6

你不能这样做。

如果您查看 Spark 代码 class ExternalCatalogUtils.getPartitionPathString,您会看到:

def getPartitionPathString(col: String, value: String): String = {
    val partitionString = if (value == null || value.isEmpty) {
      DEFAULT_PARTITION_NAME
    } else {
      escapePathName(value)
    }
    escapePathName(col) + "=" + partitionString
}
Run Code Online (Sandbox Code Playgroud)

所以计划总是像 column=value