Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark(Java):从文件名列表中获取文件名/内容对_Java_Apache Spark_Rdd - Fatal编程技术网

Spark(Java):从文件名列表中获取文件名/内容对

Spark(Java):从文件名列表中获取文件名/内容对,java,apache-spark,rdd,Java,Apache Spark,Rdd,我目前正在用Java开发一个Spark项目,遇到了一个我不知道如何解决的问题。我不熟悉各种连接/联合方法,因此我认为其中之一就是答案 我目前想输入一个文件名(或路径)列表,并获得一个JavaPairRDD对象,该对象由成对的文件名/路径和文本内容组成 我知道我可以使用标准Java获取文本内容,只需输入一个文件名内容元组列表,但我觉得必须有一种“火花”方式来实现这一点 我也知道有一个wholeTextFile方法,但它只抓取目录中的所有内容,我不确定这将是我得到的格式(例如,我可能使用amazon

我目前正在用Java开发一个Spark项目,遇到了一个我不知道如何解决的问题。我不熟悉各种连接/联合方法,因此我认为其中之一就是答案

我目前想输入一个文件名(或路径)列表,并获得一个JavaPairRDD对象,该对象由成对的文件名/路径和文本内容组成

我知道我可以使用标准Java获取文本内容,只需输入一个文件名内容元组列表,但我觉得必须有一种“火花”方式来实现这一点

我也知道有一个wholeTextFile方法,但它只抓取目录中的所有内容,我不确定这将是我得到的格式(例如,我可能使用amazons3,我不确定是否可以假设那里有一个目录)

此外,我知道我可以在一个循环中分别并行每个文件,但如何将它们重新连接在一起呢

docs = //List<String> of document filenames
JavaRDD<String> documents = sc.parallelize(docs);
JavaPairRDD<String, String> = documents.???
docs=//文档文件名列表
javardddocuments=sc.parallelize(文档);
javapairdd=文档。???
提前谢谢

编辑:我很想创建一个
的JavaPairRDD,但我不确定如何从那里开始。我对此也很谨慎,因为这听起来是错误的(例如,我是否以某种方式覆盖了并行性?)

我知道我可以让Spark从每个文档创建一个JavaRDD对象,将它们转换为列表对象,然后将它们作为元组输入,但是有没有Spark特定的方法来实现这一点


编辑2显然,我误解了文本文件是如何加载到JavaRDD对象中的。它们不会将整个字符串作为一个对象加载,而是将其按行分解。这让我重新思考我的方法,因为出于各种原因,我确实需要突破界限。因此,我认为我必须使用“黑客”方法,即使用spark加载文件,然后将其转换回列表。不过,如果有人有一个聪明的解决方案,我会把这个问题留待考虑。

我将转而使用wholeTextFiles(),因为我在尝试将数据转换为正确的格式时遇到了越来越多的问题


也就是说,我并不想把文件分成几行,我想自己用一种特殊的方式把它分成几行。

如果你用wholeTestFiles()的方式,它不是会一次读取整个数据,然后在你的独立Spark cluster/workers上并行化吗?您的驱动程序代码需要在更高的内存中运行。

在Scala中,您可以使用以下查询获得文件名spark stream或spark sc:

object GetFileNameFromStream extends java.io.Serializable {
   def getFileName(file: RDD[String]) :String ={
   file.toDebugString
  }
}

我不得不切换回去,wholeTextFiles()与AmazonS3有问题。