我看了其他类似的问题已经在这个网站上,但没有得到一个满意的答案。
我对apachespark和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;
}
});
现在,我需要把这三行作为一对(键,值)的一部分来读,我不知道怎么读。两组评论之间只有一个空行。
我看了几个网站,但没有找到解决我的问题。有人能帮我吗?谢谢!如果你需要更多的信息,请告诉我。
1条答案
按热度按时间vwhgwdsa1#
继续我之前的评论,
textinputformat.record.delimiter
可以在这里使用。如果唯一的分隔符是空行,则该值应设置为"\n\n"
.考虑以下测试数据:
然后代码(在scala中)看起来像:
输出为:
我不确定你想要输出什么,所以我把它变成了一个三元素元组。另外,如果需要的话,解析逻辑肯定可以变得更有效,但这应该会给您一些工作。