我在lambda架构上读过Nathan Marz的书。 我实际上是在证明这个解决方案的概念。
我很难构建我的Jcascalog查询。
这是我感兴趣的节俭模式的一部分:
Tap source = splitDataTap("/home/florian/Workspace/tickets");
Api.execute(
new StdoutTap(),
new Subquery("?name", "?sum")
.predicate(source, "_", "?data")
.predicate(new ExtractArticleName(), "?data")
.out("?id", "?name")
.predicate(new ExtractArticleQuantity(), "?data")
.out("?id", "?quantity")
.predicate(new Sum(), "?quantity")
.out("?sum")
);
我用Pail将一些数据存储到文件夹:/ home / tickets
现在我想对这些数据发出请求:我希望按文章名称获取数量分组的总和。 所以首先我需要得到名字,然后是数量。对于每一个我都可以获得文章的ID。
例如,我将为名称请求(id_article,name)提供此结果: (1,意大利面) - (2,pasta2) - (3,意大利面)
对于数量请求(id_article,数量): (1,2) - (2,1) - (3,1)
{{1}}
问题是我不知道如何合并结果? 如何在HDFS中使用Cascalog和数据进行连接?
答案 0 :(得分:0)
我想您想将此查询的结果存储在HDFS中,然后您需要执行以下操作:
假设数据要保存在“/ data”文件夹中,并且以简单的文本格式,那么您需要这样做:
Subquery subquery = new Subquery("?name", "?sum")
.predicate(source, "_", "?data")
.predicate(new ExtractArticleName(), "?data")
.out("?id", "?name")
.predicate(new ExtractArticleQuantity(), "?data")
.out("?id", "?quantity")
.predicate(new Sum(), "?quantity")
.out("?sum");
Api.execute(Api.hfsTextline("/data"), subquery);