Scala 是否可以根据用于划分数据集的列的值动态命名零件XXXX文件?
我有一个Scala 是否可以根据用于划分数据集的列的值动态命名零件XXXX文件?,scala,apache-spark,hadoop,Scala,Apache Spark,Hadoop,我有一个val dataset=dataset[FeedData],其中FeedData类似于案例类FeedData(feed:String,data:XYZ) 我想避免对文件进行后处理,因此我决定调用dataset.repartition($“feed”).json(“s3a://…”),以便每个feed都位于不同的文件中。问题是这些文件仍然按照XXXX部分的内容命名,因此我无法轻松地为给定提要选择相关文件,除非a)打开它们以检查feed内部的值,或者b)对文件进行后期处理以使其更友好 我希望
val dataset=dataset[FeedData]
,其中FeedData
类似于案例类FeedData(feed:String,data:XYZ)
我想避免对文件进行后处理,因此我决定调用dataset.repartition($“feed”).json(“s3a://…”)
,以便每个feed
都位于不同的文件中。问题是这些文件仍然按照XXXX部分的内容命名,因此我无法轻松地为给定提要选择相关文件,除非a)打开它们以检查feed
内部的值,或者b)对文件进行后期处理以使其更友好
我希望文件看起来像部分XXXX-{feed}
而不是部分XXXX
是否可以根据用于对数据集进行分区的列feed
的值动态命名分区文件
背景:
我找到的答案提到了一个saveAsNewAPIHadoopFile()
方法,在这个方法中,我可以为自己的文件命名实现扩展一些相关的类
有谁能帮助我理解这个方法,如何从
数据集访问它,并告诉我是否可以将所需的信息(feed
)投射到我的实现中,以动态命名分区?我试图以错误的方式进行操作:
dataset.repartition($“colName”).write.format(“json”).save(path)
正确的方法是:
dataset.write.partitionBy(“colName”).format(“json”).save(path)
区别在于您应该在.write
之后调用.partitionBy
。生成的目录如下所示:colName=value/part XXXX
有关更多信息,请参阅。它们实际上有完全不同的用途,请参阅