【发布时间】:2015-03-11 20:56:16
【问题描述】:
我目前正在使用 Java 开发 Spark 项目,但遇到了一个不知道如何解决的问题。我不熟悉各种加入/联合方法,所以我认为其中一种方法就是答案。
我目前想输入一个文件名(或路径)列表并获取一个 JavaPairRDD 对象,该对象由文件名/路径和文本内容对组成。
我知道我可以使用标准 Java 来获取文本内容并只需输入文件名内容元组列表,但我觉得必须有一种“Spark”方式来做到这一点。
我也知道有一个 wholeTextFile 方法,但它只抓取目录中的所有内容,我不确定这将是我得到的格式(例如,我可能使用 Amazon S3,我不确定我是否可以制作关于那里的目录的假设)。
此外,我知道我可以在一个循环中单独并行化每个文件,但是如何将它们重新组合在一起?
docs = //List<String> of document filenames
JavaRDD<String> documents = sc.parallelize(docs);
JavaPairRDD<String, String> = documents.???
提前致谢。
编辑:我很想创建一个<Filename, JavaRDD<String> filecontents> 的JavaPairRDD,但我不确定如何从那里开始。我也对此保持警惕,因为它听起来是错误的(即我是否以某种方式覆盖了并行性?)。
我知道我可以让 Spark 从每个文档中创建一个 JavaRDD 对象,将它们转换为 List 对象,然后将它们作为元组提供,但是有 Spark 特定的方法吗?
编辑 2 显然,我误解了如何将文本文件加载到 JavaRDD 对象中。他们不会将整个字符串作为一个对象加载,而是逐行分解。这让我重新思考我的方法,因为出于各种原因,我确实需要打破界限。所以我想我必须采用“hackish”方法,即使用 spark 加载文件,然后将其转换回 List。但是,如果有人对此有聪明的解决方案,我会留下这个问题。
【问题讨论】:
标签: java apache-spark rdd