1

を使用して、Cassandra から Pig にいくつかの単純なデータをロードしていCqlStorageます。ローダーはCqlStorageCassandra スキーマに基づいてスキーマを定義しますが、それは間違っているようです。

私が行った場合:

data = LOAD 'cql://bookdata/books' USING CqlStorage();
DESCRIBE data;

私はこれを得る:

data: {isbn: chararray,bookauthor: chararray,booktitle: chararray,publisher: chararray,yearofpublication: int}

ただし、 I の場合DUMP data、次のような結果が得られます。

((isbn,0425093387),(bookauthor,Georgette Heyer),(booktitle,Death in the Stocks),(publisher,Berkley Pub Group),(yearofpublication,1986))

Cassandra からの結果は、当然のことながらキーと値のペアです。CqlStorage()によって生成されたスキーマがなぜそれほど異なるのかわかりません。

これにより、列の値にアクセスしようとすると問題が発生します。FLATTEN私は各タプルを ing する単純なアプローチを試み、その方法で値にアクセスしようとしました:

flattened = FOREACH data GENERATE
  FLATTEN(isbn),
  FLATTEN(booktitle),
  ...
values = FOREACH flattened GENERATE
  $1 AS ISBN,
  $3 AS BookTitle,
  ...

field にアクセスしようとするとすぐに$5、ピッグはインデックスが範囲外であると文句を言います。(不思議なことにflattened、元の と同じスキーマを持っていると思いますdata。)

どういうわけか、CqlStorage間違ったスキーマを生成しているようで、そのスキーマは元のコレクションの射影に残ります。これを回避する方法はありますか?

(Cassandra 1.2.8 と Pig 0.11.1 を使用しています)

4

1 に答える 1

1

これは、 https://issues.apache.org/jira/browse/CASSANDRA-5867の修正を適用することにより、 CCE: BinSedesTuple cannot be cast to Stringで解決されました。

私のチケットに記載されているように、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
于 2013-08-27T18:43:30.420 に答える