1

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

如果我做:

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

我明白了:

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

但是,如果 I 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,
  ...

一旦我尝试访问 field $5,Pig 就会抱怨索引超出范围。(奇怪的是,flattened认为它与原始的架构相同data。)

不知何故,CqlStorage似乎生成了错误的模式,并且该模式持续存在于原始集合的投影中。有没有办法解决这个问题?

(我使用的是 Cassandra 1.2.8 和 Pig 0.11.1)

4

1 回答 1

1

通过在https://issues.apache.org/jira/browse/CASSANDRA-5867中应用修复,已解决CCE: BinSedesTuple 无法转换为 String问题。

正如 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
于 2013-08-27T18:43:30.420 回答