2015-06-10 7 views
1

Я прочитал книгу Натана Марца о лямбда-архитектуре. Я действительно делаю доказательство концепции этого решения.Jcascalog запрашивает данные бережливости на HDFS

У меня возникли трудности с построением моего запроса 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; 
} 

Я сохранил некоторые данные с Ведро в папку:/главная/билеты

Теперь я хочу, чтобы сделать запрос на этот data: Я хочу получить сумму группировки количества по названию статьи. Так что сначала мне нужно получить имена и после количества. Для каждого я могу получить идентификатор статьи.

Например, у меня будет иметь этот результат для запроса с именем (id_article, имя): (1, макаронные изделия) - (2, pasta2) - (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") 
     ); 

проблема заключается в том, что я не знаю, как объединить результат? Как я могу присоединиться к Cascalog и данным в HDFS?

ответ

0

Я предполагаю, что вы хотите сохранить результат этого запроса в HDFS, то вам необходимо сделать следующее:

Say данные должны быть сохранены в папке «/ данных», а в простом текстовом формате, то вам необходимо сделать это:

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