scala—是否可以根据用于划分数据集的列的值动态命名部件x文件?

hmtdttj4  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(313)

我有一个 val dataset = Dataset[FeedData] ,在哪里 FeedData 有点像 case class FeedData(feed: String, data: XYZ) .
我想避免对文件进行后期处理,所以我决定打电话给 dataset.repartition($"feed").json("s3a://...") 所以每个 feed 在另一个文件中结束。问题是这些文件仍然是按照 part-XXXX 因此,如果不a)打开所有文件以检查其值,我就无法轻松地为给定提要选择相关文件 feed 内部,或b)后处理的文件更友好。
我想让文件看起来像 part-XXXX-{feed} 而不是 part-XXXX 是否可以根据列的值动态命名分区文件 feed 用于对数据集进行分区?
背景:
我发现这个答案提到 saveAsNewAPIHadoopFile() 方法,在该方法中,我可以扩展一些相关类以实现自己的文件命名实现。
有谁能帮我理解这个方法,如何从一个 Dataset ,并告诉我是否可以投影所需的信息( feed )在我的实现中动态命名分区?

llycmphe

llycmphe1#

我试着用错误的方法: dataset.repartition($"colName").write.format("json").save(path) 正确的方法是: dataset.write.partitionBy("colName").format("json").save(path) 不同的是你应该打电话 .partitionBy 之后 .write . 生成的目录如下所示: colName=value/part-XXXX .
更多信息请参见此处。

相关问题