我有这样的数据
{super-row-key1 [{ts1 {version-ts1 value, version-ts2 value}}
{ts2 {version-ts1 value}}]
super-row-key2 ...}这些键和值看起来就像
{"4447c9a6-9912-44d7-a6b5-cef40735f92c:2011-06"
[{1291180500000 {1351709255098 -0.008084167000000001}}
{1291184100000 {1351709255098 -0.004395833}}
{1291185000000 {1351709255098 -0.003075}}]
...}因此,我试图弄清楚ClojureWerks Cassandra级联tap是否已经支持所有行的操作。如您所见,超级行键、超级行和超级列都是生成的(uuid、日期、时间戳等)。在我看到的示例和代码中,我认为需要预先指定标识列名、列字段名、键列名和字段映射的固定名称。
在Cassandra对MapReduce的支持的Hadoop级别上,看起来Cassandra确实支持从给定的列家族获取所有行数据。从文件中:
"Cassandra行或行片段(即对键+列的SortedMap )被输入到映射任务中,以便由作业处理,这是由描述从每行获取哪些列的SlicePredicate指定的。“
因此,这似乎是绝对有可能的,在一个较低的水平,但还不清楚如何完成我正在努力做的,在级联级。
这需要调整或创建现有tap的变体,还是可以用现有的tap来实现?
发布于 2012-11-20 07:32:26
我猜想罗伯特指的是:https://github.com/ifesdjeen/cascading-cassandra
我试着让pingles/Cascading.curandra与Cascalog一起工作,但是没有成功,所有的依赖项,因此所有接口都必须更改。所以我决定写我自己的东西(并不总是最好的主意)。
现在,回答如下:
我花了比我想象的时间更长的时间来理解如何准确地回答你,但我带来了好消息:)
首先,我不打算在水龙头中包含广泛的行支持,但事实证明,即使在当前版本中,它也是有效的。不幸的是,我还不能简单地推送示例,因为Cassaforte (我们使用的https://github.com/clojurewerkz/cassaforte,cassandra驱动程序)依赖Clojure 1.4,因为这个bug带有原始类型提示:http://dev.clojure.org/jira/browse/CLJ-852 (如果我没有弄错),而Midje有硬版本集,所以它不支持1.4,所以我不得不使用我们自己的驱动程序的过时版本。
不包括宽行的原因是cassandra团队本身不鼓励使用它们,并建议使用复合列,因为它们可以以更好的方式读取,并且不需要获取整个超列来获取部分数据。我意识到,这并不总是容易的,特别是如果有一个应用程序写得更久以前。
下一个,
你说得对,现在你应该指定名字。不知何故,我没有预见到生成的列名。
为了获取所有列,您必须使用SlicePredicate,并指定空字节缓冲区和切片开始和切片完成您传递给它的SliceRange。所以您可以设置SliceRange (.setSlice_range)而不是(.setColumn_names),这将是完全相同的事情,如果您决定坚持我们的点击,您可以在CasssandraScheme.java https://github.com/ifesdjeen/cascading-cassandra/blob/master/src/main/java/com/clojurewerkz/cascading/cassandra/CassandraScheme.java#L247中进行更改。我要做的是,当没有指定的列名时,我们只需要获取所有的列名。
另一个需要的更改是值的反序列化。在这里,您可能对如何处理宽行有更好的感觉。从本质上说,你会得到如下的回应:
Key / {java.nio.HeapByteBufferpos=65 java.nio.HeapByteBufferpos=65
所以格式基本上是一样的。在这里,您只需反序列化键并将列转换为元组。如果列中的键值对数量不同,则必须用空值填充它(可能),否则将很难理解/调试。
再一次,如果您决定退出点击,您将不得不升级到Cassaforte beta10快照,(至少在初始测试中)从project.clj中删除midje,并注释掉与它相关的所有内容。
如果您愿意,可以使用cassaforte代码来填充一个较小的数据集(我通常使用几条记录):test.clj#L26
https://stackoverflow.com/questions/13463693
复制相似问题