nichunen created KYLIN-3828:
-------------------------------
Summary: ArrayIndexOutOfBoundsException thrown when build a
streaming cube with empty data in its first dimension
Key: KYLIN-3828
URL: https://issues.apache.org/jira/browse/KYLIN-3828
Project: Kylin
Issue Type: Bug
Components: NRT Streaming
Affects Versions: v2.6.0
Reporter: nichunen
Assignee: nichunen
Fix For: Future
The root cause is
in org.apache.kylin.source.kafka.hadoop.KafkaFlatTableMapper#doMap
{code:java}
public void doMap(LongWritable key, BytesWritable value, Context context)
throws IOException, InterruptedException {
ByteBuffer buffer = ByteBuffer.wrap(value.getBytes(), 0,
value.getLength());
StreamingMessageRow row = streamingParser.parse(buffer).get(0);
if (row == null) {
throw new IllegalArgumentException("");
}
data = StringUtil.join(row.getData(), delimiter);
// output this row to value
outValue.set(Bytes.toBytes(data));
context.write(outKey, outValue);
}
{code}
Method _StringUtil.join_ is used to join a collection of string to a single
string with delimiter. But _org.apache.kylin.common.util.StringUtil#join_ will
ignore the leading empty strings in the colletion, source code is:
{code:java}
public static String join(Iterable<String> parts, String separator) {
StringBuilder buf = new StringBuilder();
for (String p : parts) {
if (buf.length() > 0)
buf.append(separator);
buf.append(p);
}
return buf.toString();
}
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)