我正在使用Spark / Scala读取xml文件的数据集,进行一些过滤并输出xml文件。当然spark输出part-00XX,但是我想要的是part-00XX.xml。原因是下游程序读取文件,并专门寻找.xml扩展名。
var writePath = new Path(baseWritePath, key) //baseWritePath here is an S3 bucket, but could be any base path.
dataframe.write.format("com.databricks.spark.xml").option("rootTag", "root").option("rowTag", "row").save(writePath)
我希望编写器中有一个选项可以保存扩展名,但是它似乎不存在。现在我在想最好的方法可能就是重命名所有文件,但是有没有一种好的hadoop fs方法来做到这一点?
我可以想到的直接方法是以某种方式获取目录中所有文件的列表,遍历该目录并重命名该文件。似乎有更好的方法来处理这么多文件,但是我似乎找不到使用Hadoop的好方法。
val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
val files = fs.globStatus(new Path(writePath, "part*"))
files.foreach(file => fs.rename(file.getPath, new Path(writePath, file.getPath.getName + ".xml")))
以上只是给了我一个Task Not Serializable异常。
如果能为我指明正确的方向,我将不胜感激。谢谢。