CqlStorage生成错误的Pig架构

时间:2013-08-22 22:01:35

标签: cassandra apache-pig cql3

我正在使用CqlStorage将一些来自Cassandra的简单数据加载到Pig中。 CqlStorage加载器定义了一个基于Cassandra模式的模式,但似乎是错误的。

如果我这样做:

data = LOAD 'cql://bookdata/books' USING CqlStorage();
DESCRIBE data;

我明白了:

data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: chararray,yearofpublication: int}

但是,如果我DUMP data,我会得到以下结果:

((isbn,0425093387),(bookauthor,Georgette Heyer),(booktitle,Death in the Stocks),(publisher,Berkley Pub Group),(yearofpublication,1986))

显然,Cassandra的结果是关键/值对,正如预期的那样。我不知道为什么CqlStorage()生成的架构会如此不同。

这确实导致我在尝试访问列值时遇到问题。我尝试了FLATTEN每个元组的天真方法,然后尝试以这种方式访问​​这些值:

flattened = FOREACH data GENERATE
  FLATTEN(isbn),
  FLATTEN(booktitle),
  ...
values = FOREACH flattened GENERATE
  $1 AS ISBN,
  $3 AS BookTitle,
  ...

当我尝试访问字段$5时,Pig抱怨索引超出范围。 (奇怪的是,flattened认为它与原始data具有相同的架构。)

不知何故,CqlStorage似乎生成了错误的架构,并且该架构仍然存在于原始集合的投影中。有什么方法可以解决这个问题吗?

(我正在使用Cassandra 1.2.8和Pig 0.11.1)

1 个答案:

答案 0 :(得分:1)

通过在CCE: BinSedesTuple cannot be cast to String中应用修补程序,https://issues.apache.org/jira/browse/CASSANDRA-5867已解决此问题。

正如Alex Lui在我的机票中提到的那样:

git clone http://git-wip-us.apache.org/repos/asf/cassandra.git
cd cassandra
git checkout cassandra-1.2
patch -p1 < 5867-bug-fix-filter-push-down-1.2-branch.txt
ant