将 RDD 分区写入其自己目录中的单个 parquet 文件

Writing RDD partitions to individual parquet files in its own directory

我正在努力解决我想将每个 RDD 分区写入以将镶木地板文件与其自己的目录分开的步骤。示例将是:

    <root>
        <entity=entity1>
            <year=2015>
                <week=45>
                    data_file.parquet

这种格式的优点是我可以直接在 SparkSQL 中将其用作列,而不必在实际文件中重复这些数据。这将是获得特定分区的好方法,而无需在其他地方存储单独的分区元数据。

作为前面的步骤,我从大量 gzip 文件中加载了所有数据,并根据上述键进行了分区。

可能的方法是将每个分区作为单独的 RDD,然后写入它,尽管我找不到任何好的方法。

如有任何帮助,我们将不胜感激。顺便说一句,我是这个堆栈的新手。

我认为可以通过在要保存的 RDD 上调用 foreachPartition(f: Iterator[T] => Unit) 来实现。

在您提供的函数中 foreachPartition:

  1. 准备路径hdfs://localhost:9000/parquet_data/year=x/week=y
  2. 一个ParquetWriter
  3. 通过将每一行插入到 recordWriter 来耗尽 Iterator。
  4. 清理

我认为接受的答案没有恰当地回答问题。

尝试这样的事情:

df.write.partitionBy("year", "month", "day").parquet("/path/to/output")

您将得到分区的目录结构。