私はすでにこのサイトで尋ねられている他の類似の質問を見てきましたが、満足のいく回答は得られませんでした。Apache Sparkの複数行入力でJavaを使用
私はApache sparkとhadoopの初心者です。私の問題は、オンラインショッピングサイトの商品のマルチラインレビューを含む入力ファイル(35GB)があることです。情報は、以下に示すようにファイルに記載されています。
productId: C58500585F
product: Nun Toy
product/price: 5.99
userId: A3NM6WTIAE
profileName: Heather
helpfulness: 0/1
score: 2.0
time: 1624609
summary: not very much fun
text: Bought it for a relative. Was not impressive.
これは1ブロックのレビューです。そのようなブロックは何千もの空白行で区切られています。私がここから必要としているのは、productId、userId、およびscoreです。したがって、私は必要な行だけをJavaRDDにフィルタリングしました。それは、次のようになります。
productId: C58500585F
userId: A3NM6WTIAE
score: 2.0
コード:
SparkConf conf = new SparkConf().setAppName("org.spark.program").setMaster("local");
JavaSparkContext context = new JavaSparkContext(conf);
JavaRDD<String> input = context.textFile("path");
JavaRDD<String> requiredLines = input.filter(new Function<String, Boolean>() {
public Boolean call(String s) throws Exception {
if(s.contains("productId") || s.contains("UserId") || s.contains("score") || s.isEmpty()) {
return false;
}
return true;
}
});
は今、私は方法がわからない1 (キー、値)ペアの一部として、これらの3行を読む必要があるが。 2ブロックのレビューの間には、の空白行しかありません。
私はいくつかのウェブサイトを見てきましたが、私の問題を解決できませんでした。 誰でも私にこれを手伝ってもらえますか?どうもありがとう!詳しい情報が必要な場合はお知らせください。
'textinputformat.record.delimiter'で遊んだことはありますか? [this](http://stackoverflow.com/questions/27541637/how-to-process-multi-line-input-records-in-spark)のようなものです。そうすることで、各レコードがテキストブロック全体で構成されるRDDを取得できます。 –
@Student:ブロックフィールド(productid、product ...など)はデリミタで区切られていますか? – Shankar
@Student:あなたが必要とするものは 'map'で' filter'ではありません。 – Shankar