Cassandra CqlStorage生成错误的Pig架构
我正在使用Cassandra CqlStorage生成错误的Pig架构,cassandra,apache-pig,cql3,Cassandra,Apache Pig,Cql3,我正在使用CqlStorage将一些简单的数据从Cassandra加载到Pig中。CqlStorageloader基于Cassandra模式定义了一个模式,但它似乎是错误的 如果我这样做: data = LOAD 'cql://bookdata/books' USING CqlStorage(); DESCRIBE data; 我明白了: data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: c
CqlStorage
将一些简单的数据从Cassandra加载到Pig中。CqlStorage
loader基于Cassandra模式定义了一个模式,但它似乎是错误的
如果我这样做:
data = LOAD 'cql://bookdata/books' USING CqlStorage();
DESCRIBE data;
我明白了:
data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: chararray,yearofpublication: int}
但是,如果我转储
数据
,我会得到如下结果:
((isbn,0425093387),(bookauthor,Georgette Heyer),(booktitle,Death in the Stocks),(publisher,Berkley Pub Group),(yearofpublication,1986))
显然,正如预期的那样,Cassandra的结果是键/值对。我不知道为什么CqlStorage()
生成的模式会如此不同
这确实给我在访问列值时带来了问题。我尝试了一种天真的方法,将每个元组展平,然后尝试以这种方式访问值:
flattened = FOREACH data GENERATE
FLATTEN(isbn),
FLATTEN(booktitle),
...
values = FOREACH flattened GENERATE
$1 AS ISBN,
$3 AS BookTitle,
...
当我试图访问字段$5
,Pig就抱怨索引超出了范围。(奇怪的是,flatted
认为它与原始的数据具有相同的模式
)
不知何故,CqlStorage
似乎生成了错误的模式,并且该模式一直存在于原始集合的投影中。有办法解决这个问题吗
(我使用的是Cassandra 1.2.8和Pig 0.11.1)这是通过在中应用修复程序解决的
正如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
git克隆http://git-wip-us.apache.org/repos/asf/cassandra.git
卡桑德拉光盘
git checkout cassandra-1.2
补丁-p1<5867-bug-fix-filter-push-down-1.2-branch.txt
蚂蚁
通过在中应用修复程序解决了此问题
正如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
git克隆http://git-wip-us.apache.org/repos/asf/cassandra.git
卡桑德拉光盘
git checkout cassandra-1.2
补丁-p1<5867-bug-fix-filter-push-down-1.2-branch.txt
蚂蚁
如果尝试访问元组之类的字段,会发生什么情况?EGB=FOREACH数据生成isbn.$0作为键,isbn.$1作为值
尝试访问元组之类的字段会导致不允许引用chararray类型列中的列
如果尝试访问元组之类的字段会发生什么?EGB=FOREACH数据生成isbn.$0作为键,isbn.$1作为值
尝试访问元组之类的字段会导致不允许引用chararray类型列中的列