如何用JavaSparkHadoop解决这个问题:大文本文件,需要获取文件名

如何用JavaSparkHadoop解决这个问题:大文本文件,需要获取文件名,java,hadoop,apache-spark,Java,Hadoop,Apache Spark,我是一名学生,这是我在Spark上的第一个项目。 我正在做一个项目,目的是在一个大的DNA数据集中找到发现疾病的模式。 我正在使用Java7、Hadoop2.5.1和Spark 1.3.1 在写问题之前,我先向大家介绍一下这个场景以及我到目前为止所做的事情 我需要创建一个矩阵,该矩阵在行中包含样本,在列中包含属性。 要识别我在第一列中需要的每一行,请输入文件名。为了对每一行进行分类,我需要指定样本是案例还是控件,这些信息从文件名中恢复。因此,必须恢复文件名 矩阵必须从不同的文本文件创建,每个文件

我是一名学生,这是我在Spark上的第一个项目。 我正在做一个项目,目的是在一个大的DNA数据集中找到发现疾病的模式。 我正在使用Java7、Hadoop2.5.1和Spark 1.3.1

在写问题之前,我先向大家介绍一下这个场景以及我到目前为止所做的事情

我需要创建一个矩阵,该矩阵在行中包含样本,在列中包含属性。 要识别我在第一列中需要的每一行,请输入文件名。为了对每一行进行分类,我需要指定样本是案例还是控件,这些信息从文件名中恢复。因此,必须恢复文件名

矩阵必须从不同的文本文件创建,每个文件代表一个样本。每个文件都有列中列出的属性。所以我需要转置这个列,以便在矩阵中使用它(但这应该很简单)

最后一点很重要,每个文本文件的大小都大于100MB

这就是我所做的。 我开始使用
textFile
方法,但在谷歌上花了很多小时后,我明白没有办法获得文件名。 我尝试了使用
wholeTextFiles
方法,对于小文件来说一切都很完美,但是当我尝试使用每个100Mb的文件时,我得到了一个内存堆错误。 我做的最后一件事是使用
newAPIHadoopFile
,但我发现它很难使用,而且我没有找到好的文档

有人遇到过这样的问题吗?有人有解决这种情况的好方法吗


谢谢

谢谢@realponsuggest的建议,我解决了这个问题。
我使用
wholeTestFiles
方法创建带有路径和整个内容的RDD对。然后,我通过添加和设置这两个参数修改了
spark submit
命令:
--executor memory 20G
--total executor cores 10

textFile
为您提供了一个RDD,其项目是文件的行
wholeTextFiles
提供成对RDD,其中值为整个文件内容。您的RDD项目应该是什么?成对RDD是最好的解决方案,包括路径和整个文本。我用Java编写了代码,它只适用于小文件。当我将它用于4个100MB大小的文件时,它会返回内存堆大小错误。我正在寻找一种消除内存限制的方法。问题是,每个RDD项必须位于单个执行器的内存中。事实上,每个RDD分区必须存在于单个执行器的内存中。因此,您要么必须在执行器上设置更大的堆大小,要么必须在每个分区中将数据划分为很少的项。另外请注意,如果您是在本地模式而不是集群模式下运行此程序,那么您将受到驱动程序堆大小的限制。感谢您的回答,如果我理解我的情况,那么最好将数据划分为每个分区中的几个项。因为我需要处理1000或2000个文件(总共超过100GB),我认为设置更大的堆并不明智。对的幸运的是,我运行的集群有54个节点,每个节点的内存为128GB。问题是较小的数据对您是否有意义。如果您需要整个文件,那么这就是您所需要的,并且只创建几个100MB的分区不是问题(对于这样的大节点来说,这不会是问题),但是您需要从执行器请求内存。另一方面,如果您可以使用单线执行同样好的操作,那么这将更容易。