在Cassandra表上运行PIG脚本

时间:2013-07-29 16:29:49

标签: hadoop cassandra apache-pig cassandra-cli

我正在使用 带有补丁5234的Cassandra-1.2 - 通过CQL3创建的表格无法访问 Hadoop - 1.1.2 猪0.11.1

我在Cassandra有一张桌子

datatypetest(num int PRIMARY KEY,ascii ascii,blob blob,text text,varnum varint);

并且datatypetest中的测试数据是

 num | ascii | blob   | text | varnum
-----+-------+--------+--------+------
  13 |   126 | 0x0003 | John | null

我运行了以下PIG脚本

test1 = LOAD 'cassandra://keyspace1/datatypetest' USING CassandraStorage() AS 
(num:int, columns: bag {T: tuple(name, value)});

在别名test1

中输出如下
(12,{((),),((ascii),125),((blob),��),((text),deepak)})

正如您在输出中看到的那样,它不是以下格式

(<row_key>,{(<column_name1>,<value1>),(<column_name2>,<value2>)})

内袋有元组,它有另一个内元组和第一个内元组,我认为键是空的。

我不能使用columns.ascii或columns.blob或columns.text来访问下面的列元组并获得异常

test2 = FOREACH test1 GENERATE num, columns.text;
2013-07-29 09:11:58,488 [main] ERROR org.apache.pig.tools.grunt.Grunt - 
ERROR 1200: Pig script failed to parse: 
<line 3, column 8> pig script failed to validate:    
org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1128: 
Cannot find field text in name:tuple(),value:bytearray

如何访问列元组。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

引用使用CQL3创建的表时,不应使用CassandraStorageCassandraStorage类似于Thrift API。访问CQL3表时,请使用CqlStorage

test1 = LOAD 'cql://keyspace1/datatypetest' USING CqlStorage();

这应该为列及其内容提供名称/值元组。响应应该如下所示:

((name,13),(ascii,126),(blob,"blobvalue"),(text,John))

但是,返回的集合与CqlStorage生成的模式之间似乎存在不匹配。 (See this question。)