在cassandra表上运行pig脚本

0tdrvxhp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(424)

我正在使用带有补丁5234的cassandra-1.2-通过cql3创建的表不能被pig hadoop-1.1.2 pig 0.11.1访问
我在Cassandra有一张table
datatypetest(num int主键、ascii、blob blob、text text、varnum varint);
datatypetest中的测试数据是

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

我运行了以下脚本

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访问下面这样的columns元组并获取异常

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

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

toiithl6

toiithl61#

你不应该使用 CassandraStorage 引用使用cql3创建的表时。 CassandraStorage 类似于thrift api。访问cql3表时,使用 CqlStorage :

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

这将为列及其内容提供名称/值元组。答案应该是这样的:

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

但是,在返回的集合和生成的模式之间似乎确实存在不匹配 CqlStorage 生成(请看这个问题。)

相关问题