cqlstorage生成错误的pig模式

mtb9vblg  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(287)

我正在用 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)

iovurdzv

iovurdzv1#

通过应用中的修复,解决了cce:binsedestuple无法转换为字符串的问题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

相关问题