从Scala / Spark中的HDFS读取文本文件

时间:2017-12-29 09:52:58

标签: xml scala apache-spark hdfs

我正在使用Scala和Spark,并希望将XML文件作为单个字符串读取。 我很难找到一个简洁的Scala-ish方法来做到这一点。

我的第一个想法是使用

a

但我担心这会维持行的顺序,这对于保持字符串中包含的xml的完整性很重要。

我在网上找到的用于读取HDFS中文件的其他内容涉及使用弃用的方法,所以我想避免这些。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

sc.textFile返回带有"排序行"的RDD。 请注意,如果在提供的路径中有多个文件,则文件也将按字母顺序(文件名)分配给分区。 因此,作为结论,sc.textFile保持行的顺序。

至于我可以检查查看collect()方法的实现,也保留了顺序,所以没有理由不直接使用:

sc.textFile(pathToFile).collect()

这应该有用。

但是,如果你想为collect的不同实现做好准备(因为在文档中不能保证保持顺序)我建议使用的RDD方法zipWithIndex在哲学上等同于scala' s具有相同名称的方法。

所以我会做这样的事情:

sc.textFile(pathToFile).zipWithIndex().collect().sortBy(_._2).map(_._1)

答案 1 :(得分:0)

选项:

  1. 阅读整个文件:
  2. sparkContext.wholeTextFiles(filePath)

    但如果你没有很多这样的文件,看起来就像是开销。

    1. 获取HDFS文件系统对象,并将文件读取为InputStream。有很多例子:HDFS FileSystems API example