Я просмотрел другие подобные вопросы, заданные уже на этом сайте, но не получил удовлетворительного ответа.
Я новичок в Apache Spark и Hadoop. Моя проблема в том, что у меня есть входной файл (35 ГБ), который содержит многострочные обзоры товаров на сайтах интернет-магазинов. Информация представлена в файле, как показано ниже:
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.
Это один блок обзора. Таких блоков, разделенных пустыми строками, тысячи. отсюда мне нужны productId, userId и оценка, поэтому я отфильтровал 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;
}
});
Теперь мне нужно прочитать эти три строки как часть одной пары (ключ, значение), но я не знаю, как это сделать. Между двумя блоками отзывов будет только пустая строка.
Я просмотрел несколько сайтов, но не нашел решения своей проблемы. Может ли кто-нибудь помочь мне с этим? Большое спасибо! Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
textinputformat.record.delimiter
? Что-то вроде этого. Это позволит вам получить RDD, где каждая запись состоит из целого блока текста. - person Junjun Olympia   schedule 14.10.2016map
, а неfilter
- person Shankar   schedule 14.10.2016JavaRDD<String> input = context.textFile("path");
строки вы можете попытаться выполнить foreach входной rdd и сообщить мне, печатает ли он весь блок как одну запись или каждая строка в блоке идет как одна запись? - person Shankar   schedule 14.10.2016