jcascalog在hdfs上查询节俭数据

nxagd54h  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(250)

我读了纳森·马兹关于兰姆达建筑的书。我实际上是在证明这个解决方案的概念。
我很难构建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\u article,name):(1,pasta2)-(2,pasta2)-(3,pasta2)
对于数量请求(标识物品,数量):(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和数据连接?

vshtjzan

vshtjzan1#

我猜您希望将此查询的结果存储在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);

相关问题