【发布时间】:2014-06-13 04:14:43
【问题描述】:
我正在使用 Nutch 2.2.1 和 Cassandra 2 来抓取页面。对于测试,我只需将一个 url 注入 Cassandra 并探索数据库。
使用 CQL 我可以查询网页键空间中的表
cqlsh:simplex> select * from pages.f;
key | column1 | value
--------------------------------------+---------+--------------------
0x6564752e6373752e7777773a687474702f | 0x6669 | 0x00278d00
0x6564752e6373752e7777773a687474702f | 0x73 | 0x3f800000
0x6564752e6373752e7777773a687474702f | 0x7473 | 0x00000145a266703e
如果我将这些十六进制字节转换为字符串,那很好。关键将是还原的 url。
然后我编写 java 代码以使用 datastax java 驱动程序 2 (http://www.datastax.com/documentation/developer/java-driver/2.0/java-driver/whatsNew2.html) 读取表 f
我按照示例代码进行操作
Cluster cluster = Cluster.builder().addContactPoint("10.20.104.181").build();
Session session = cluster.connect();
ResultSet results = session.execute("SELECT * FROM webpage.f");
for (Row row : results) {
System.out.println("Key");
System.out.println(toStrFromByteBuffer(row.getBytes("key")));
System.out.println("column1");
System.out.println(toStrFromByteBuffer(row.getBytes("column1")));
System.out.println("value");
System.out.println(toStrFromByteBuffer(row.getBytes("value")));
}
cluster.close();
public static String toStrFromByteBuffer(ByteBuffer buffer)
{
byte[] ar=buffer.array();
System.out.println(ar.length);
return new String(ar,Charset.forName("UTF-8"));
}
结果如下。您可以看到 row.getBytes("key") 返回整行数据而不是特定列值。
有高手帮忙吗?
【问题讨论】:
-
你好,我现在也有同样的问题。我正在使用 Nutch 2.2.1 和 Cassandra 1.2.9。我不知道为什么数据以十六进制格式存储。我想在 UTF-8 中使用它。你解决了吗?