Spark中分区实木复合地板文件的动态输出路径

时间:2018-06-25 18:10:25

标签: apache-spark apache-spark-sql parquet mapr

我们正在使用MapR FS滚动卷,并且有必要将分区的输出镶木文件与相应的卷对齐。

df
 .write
 .partitionBy("year", "month", "day", "hour")
 .parquet("/data/nfs/{year}/{month}/{day}/datastore")

这个想法是在运行时通过自定义输出提交程序解析路径:

class MaprParquetOutputComitter(outputPath: Path, context: TaskAttemptContext)
  extends ParquetOutputCommitter(
    MaprParquetOutputComitter.resolvePath(outputPath), 
    context)

object MaprParquetOutputComitter extends StrictLogging {
  def resolvePath(p: Path): Path = {
    logger.info(p.toString)

    // Retrieve year, month and day from path object
    // and replace placeholders with extracted values

    new Path(resolvedPath)
  }
}

不幸的是,看来outputPath看起来像这样的"/data/nfs/{year}/{month}/{day}/datastore",而不是"/data/nfs/{year}/{month}/{day}/datastore/year=2018/month=6/day=25/hour=8"

是否有任何方法可以通过这种方法(覆盖ParquetOutputCommitter)获取其中包含分区的输出路径?或者,也许还有另一种解决方案可以实现这一目标?

0 个答案:

没有答案