将RDD分区写入其自己的目录中的各个镶木地板文件

Raj*_*sad 8 scala apache-spark parquet rdd apache-spark-sql

我正在努力处理我想要编写每个RDD分区的步骤,以使用自己的目录分隔镶木地板文件.示例将是:

    <root>
        <entity=entity1>
            <year=2015>
                <week=45>
                    data_file.parquet
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

BAR*_*BAR 49

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

尝试这样的事情:

df.write.partitionBy("year", "month", "day").parquet("/path/to/output")
Run Code Online (Sandbox Code Playgroud)

您将获得分区目录结构.


yjs*_*hen 2

foreachPartition(f: Iterator[T] => Unit)我认为通过调用你想要保存的RDD是可能的。

在您提供的函数中foreachPartition

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