我正在用 CqlStorage
. 这个 CqlStorage
loader定义了一个基于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条答案
按热度按时间iovurdzv1#
通过应用中的修复,解决了cce:binsedestuple无法转换为字符串的问题https://issues.apache.org/jira/browse/cassandra-5867.
正如alex lui在我的票上提到的: