我有一个 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
)在我的实现中动态命名分区?
1条答案
按热度按时间llycmphe1#
我试着用错误的方法:
dataset.repartition($"colName").write.format("json").save(path)
正确的方法是:dataset.write.partitionBy("colName").format("json").save(path)
不同的是你应该打电话.partitionBy
之后.write
. 生成的目录如下所示:colName=value/part-XXXX
.更多信息请参见此处。