Jcascalog 用于查询 HDFS 上的节俭数据



我读了Nathan Marz关于lambda架构的书。我实际上是在验证这个解决方案的概念。

我很难构建我的 Jcascalog 查询。

这是我的节俭模式中我们感兴趣的部分:

union ArticlePropertyValue {
  1: decimal quantity,
  2: string name;
}
union ArticleID {
  1: int id;
}
struct ArticleProperty {
   1: required ArticleID id;
   2: required ArticlePropertyValue property;
}
union DataUnit {
  1: TicketProperty ticket_property;
  2: ArticleProperty article_property;
}

我用Pail将一些数据存储到文件夹中:/home/tickets。

现在我想对这个数据提出一个请求:我想得到按文章名称分组的数量总和。所以首先我需要得到名字,然后是数量。对于每一个,我都可以获得文章的ID。

例如,我将为名称请求(id_article,名称)提供以下结果:(1、意大利面) -(2、意大利面2) -(3、意大利面)

对于数量请求(id_article,数量):(1, 2) -(2, 1) -(3, 1)

  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")
          );

问题是我不知道如何合并结果?如何在HDFS中执行与Cascalog和数据的连接?

我想你想把这个查询的结果存储在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);

相关内容

  • 没有找到相关文章

最新更新