我正在努力解决我想要编写每个RDD分区以将镶木地板文件与其自己的目录分开的步骤。示例将是:
<root>
<entity=entity1>
<year=2015>
<week=45>
data_file.parquet
这种格式的优点是我可以直接在SparkSQL中使用它作为列,我不必在实际文件中重复这些数据。这是获得特定分区而不在其他地方存储单独的分区元数据的好方法。
作为前一步,我从大量gzip文件加载所有数据,并根据上述密钥进行分区。
可能的方法是将每个分区作为单独的RDD然后写入,但我找不到任何好的方法。
任何帮助将不胜感激。顺便说一下,我是这个堆栈的新手。
答案 0 :(得分:48)
我不认为接受的答案会恰当地回答这个问题。
尝试这样的事情:
df.write.partitionBy("year", "month", "day").parquet("/path/to/output")
您将获得分区目录结构。
答案 1 :(得分:2)
我认为可以通过在要保存的RDD上调用foreachPartition(f: Iterator[T] => Unit)
来实现。
您在foreachPartition
中提供的功能:
hdfs://localhost:9000/parquet_data/year=x/week=y