【发布时间】:2016-10-14 07:55:44
【问题描述】:
我查看了该网站上已经提出的其他类似问题,但没有得到满意的答案。
我是 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.
这是一个审查块。有数千个这样的块由空行分隔。我从这里需要的是 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;
}
});
现在,我需要将这三行作为 (key, value) 对的一部分来阅读,我不知道该怎么做。两块评论之间只会有一条空白线。
我查看了几个网站,但没有找到解决问题的方法。 有人可以帮我吗?非常感谢!如果您需要更多信息,请告诉我。
【问题讨论】:
-
你有没有想过和
textinputformat.record.delimiter一起玩?像this 这样的东西。这样做可以让您获得一个 RDD,其中每条记录都由整个文本块组成。 -
@Student : 块字段(productid,product...etc) 是否被任何分隔符分割?
-
@Student:你还需要
map而不是filter -
@Shankar 不,它们唯一的分隔符是它们位于不同的行上。因此它们仅由新行分隔符分隔,没有其他特殊分隔符。
-
@Junjun Olympia 我已经研究过了,但正如我在问题中所说,没有特殊的分隔符。块仅由空行分隔。
标签: hadoop apache-spark mapreduce multiline