ファイルにs3キーのリストがあり、その値をRDDに入れたいと考えています。これを行う正しい方法は何ですか?正しい方法でs3キーをSparkで値にマップする
以下のコードは私の現在の試みです。ファイルをs3
からプルダウンする呼び出しは、map関数の外部で機能しますが、その内部にヌルポインタ例外が発生します。これは、マップ呼び出しの内部でRDDを作成したり操作したりすることができないためだと思いますが、これを回避する方法がわかりません。 S3からファイルを読み込み、RDDに入れないでファイルを読み込む方法はありますか?理想的な文字列またはinputStreamに直接読み込むことができますが、Source
がs3a
形式をサポートしているとは思われません。これは、hadoopファイルシステムから読み込んでいるものでなければなりません。
JavaRDD<String> keys = spark.sparkContext().textFile("/list/of/keys", 0).toJavaRDD();
SparkContext sc = spark.sparkContext();
JavaRDD<Tuple2<String, String>> file = spark.sparkContext().wholeTextFiles("s3a://bucket/key",0).toJavaRDD();
JavaRDD<String> files =
keys.map(
o -> {
JavaRDD<Tuple2<String, String>> rawfile = spark.sparkContext().wholeTextFiles("s3a://bucket/key",0)toJavaRDD();
return rawFile.take(1).get(0)._2();
}
);
私はそれらが原因真されていないS3には非常に高価なことができることを読んだとして、私は複数のファイルを読み込むためにwholeTextFiles
を使用していない理由は、私がs3
に往復リクエストを作成しないようにするということですファイルシステム。
データはCSVタイプですか? –
s3のデータは?またはキーストア? –
s3のデータがCSVとして保存されているかどうかを確認したいと思います。 –