抱歉,要添加评论作为答案,但我们正在尝试做同样的事情,但您提到您能够做到“当我在widerow 属性设置为false 的情况下运行作业时,预期的列切片将传递到映射器类.” 但是当我们将widerow属性设置为false时,我们仍然会遇到错误。你是如何在切片谓词中传递时间戳范围的。
我们使用的 CF 是事件的时间线,其中 uid 作为分区键, event_timestamp 作为复合列。等效的 cql 是,
CREATE TABLE testcf ( uid varchar, eventnt_timestamp 时间戳, event varchar, PRIMARY KEY (uid, event_timestamp));
Map reduce 代码 – 仅发送开始日期和结束日期内的事件(注意:我们可以从 cassandra-client 和 cqlsh 查询时间戳复合列并获取所需的事件)
// Settting widerow to false
config.setInputColumnFamily(Constants.KEYSPACE_TRACKING, Constants.CF_USER_EVENTS, false);
DateTime start = getStartDate(); // e.g., July 30th 2013
DateTime end = getEndDate(); // e.g., Aug 6th 2013
SliceRange range = new SliceRange(
ByteBufferUtil.bytes(start.getMillis()),
ByteBufferUtil.bytes(end.getMillis()),
false, Integer.MAX_VALUE);
SlicePredicate predicate = new SlicePredicate().setSlice_range(range);
config.setInputSlicePredicate(predicate);
But the above code doesn't work. We get the following error,
java.lang.RuntimeException: InvalidRequestException(why:Invalid bytes remaining after an end-of-component at component0)
at org.apache.cassandra.hadoop.ColumnFamilyRecordReader$StaticRowIterator.maybeInit(ColumnFamilyRecordReader.java:384)
想知道我们是否在切片范围内的开始和结束参数中发送了不正确的数据。
任何提示或帮助都是有用的。