私はwholeTextFilesを使用してフォルダ内のすべてのファイル名を読み取り、それらを1つずつ別々に処理しようとしています(たとえば、各データセットのSVDベクトルを取得しようとしています。合計)。データはスペースで区切られ、異なる行(行列など)に配置された.txtファイルに保存されます。SparkContext.wholeTextFilesの後に複数のファイルを個別に処理する方法
私は "WholeTextFiles("すべてのテキストファイル "のパス") "を使用した後、問題を読んでデータを解析するのが難しく、私のような方法を使用できません1つのファイルのみを読み取るときに使用されます。この方法は、1つのファイルを読み込んだときに正常に動作し、正しい出力が得られます。誰かが私にここでそれを修正する方法を教えてもらえますか?ありがとう!
public static void main (String[] args) {
SparkConf sparkConf = new SparkConf().setAppName("whole text files").setMaster("local[2]").set("spark.executor.memory","1g");;
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
JavaPairRDD<String, String> fileNameContentsRDD = jsc.wholeTextFiles("/Users/peng/FMRITest/regionOutput/");
JavaRDD<String[]> lineCounts = fileNameContentsRDD.map(new Function<Tuple2<String, String>, String[]>() {
@Override
public String[] call(Tuple2<String, String> fileNameContent) throws Exception {
String content = fileNameContent._2();
String[] sarray = content .split(" ");
double[] values = new double[sarray.length];
for (int i = 0; i< sarray.length; i++){
values[i] = Double.parseDouble(sarray[i]);
}
pd.cache();
RowMatrix mat = new RowMatrix(pd.rdd());
SingularValueDecomposition<RowMatrix, Matrix> svd = mat.computeSVD(84, true, 1.0E-9d);
Vector s = svd.s();
}});
元々私はwholeTextFilesを使用してこの大きなセットの各ファイルを解析しようとしていましたが、かなり難しいと感じました。ループを使用して各ファイルを読み込み、結果をまとめてマージしようとするのではなく、並行して行う方法を見つけようとします。地図区画またはフィルタヘルプが表示されますか? –
アップデートを参照してください。私はあなたがそれを好きになると思います。指が交差した。 –
ありがとう、私はそれをチェックしています。ただ興味がありますが、私のコードでは、別の仕事区画で想定されるベクターが生成されています。ベクトルを「収集」する方法はありますか?私はrowMatrixを収集することができることを知っています。それは、それを直接rddに変換するメソッド ".rdd()"を持っていますが、Vectorはそうではありません。今私は100のデータセットすべてにすべての "U"(SVDの1つの出力ですが、私が望むものではない)を簡単に保存できますが、保存したい出力ベクトルである "S"ベクトルに対してはできません、私が常に印刷できるのは最後の出力結果ですが、すべてがコレクションではありません。 –