0

我需要执行以下操作。提供的输入如下图

State city
NY    joe 
NY    jane 
LA    zorro 
LA    steve

并且输出应该是

State city
NY    joe, jane
LA    steve, zorro

如何使这成为可能?我想我必须处理多个输入行,但是当我第二次尝试使用该getRow()方法读取新行时,它会抛出数组越界异常......请帮助我解决这个问题.. TIA

这是我尝试过的逻辑...

String cities;
Object[][] r = new Object[10][];
static int j;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{

for(;j<10||(r[j]=getRow())!=null;j++)
{
return true;
}

cities=get(Fields.In, "CITY").getString(r[0]);

int i;
for(i=1;r[i]!=null;i++)
{
if(get(Fields.In, "STATE").getString(r[i-1])==get(Fields.In, "STATE").getString(r[i])){

cities=cities+","+get(Fields.In, "CITY").getString(r[i]);
}
else{
Object[] outputRow = createOutputRow(new Object[4],1);
get(Fields.Out, "STATE").setValue(outputRow, get(Fields.In, "STATE").getString(r[i-1]));
get(Fields.Out, "CITIES").setValue(outputRow, cities);
putRow(data.outputRowMeta, outputRow);
cities=get(Fields.In, "CITY").getString(r[i]);
}
}
Object[] outputRow = createOutputRow(new Object[4],1);
get(Fields.Out, "STATE").setValue(outputRow, get(Fields.In, "STATE").getString(r[i-1]));
get(Fields.Out, "CITIES").setValue(outputRow, cities);
putRow(data.outputRowMeta, outputRow);

return false;
}
4

1 回答 1

1

你不需要UDJC。使用排序行步骤或 SQL 中的 ORDER BY 子句按“状态”对输入集进行排序(如果使用表输入步骤)。使用 Group By 步骤并为您的 Group Field 设置 State,然后在 Subject 字段中为您的聚合指定“city”并Concatenate strings separated by ,用于您的聚合类型。

于 2013-06-28T18:53:14.997 回答