提问者:小点点

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


我正在努力尝试将每个RDD分区写入具有自己目录的独立parquet文件。示例将是:

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

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

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

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

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


共2个答案

匿名用户

我认为公认的答案没有恰当地回答这个问题。

试试这样的东西:

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

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

匿名用户

我认为可以通过调用foreachParttion(f: Iterator[T]=

在您提供给foreachParttion的函数中:

  1. 准备路径hdfs://localhost:9000/parquet_data/year=x/week=y
  2. 一个ParquetWriter
  3. 通过将每一行插入记录写入器来耗尽迭代器。
  4. 清理干净