java - 水壶:processRow() 中的多个 putRows() 正确吗?

标签 java normalization pentaho kettle

我正在处理一个 /etc/group来自系统的文件。我加载 CSV input使用分隔符步进 : .它有四个字段:group , pwfield , gid , members . members字段是一个逗号分隔的列表,其中包含从 0 到无限的未指定计数的帐户名称。

我想生成一个包含三个字段的记录列表:group , gid , account .在第一步中,我使用 User Defined Java Class ,在第二个我使用 Select values .

示例输入:

root:x:0:
first:x:100:joe,jane,zorro
second:x:101:steve

示例输出 (XLS) - 预期:
group   gid account
first   100 joe
first   100 jane
first   100 zorro
second  101 steve

示例输出 (XLS) - 实际,错误:
group   gid account
first   100 zorro
first   100 zorro
first   100 zorro
second  101 steve

用户定义的 Java 类:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
    // boilerplate
    Object[] r = getRow();
    if (r == null) {
        setOutputDone();
        return false;
    }
    String tmp = get(Fields.In, "members").getString(r);
    if(null==tmp)
        return true;
    String accounts[] = tmp.split(",");
    for(int i=0; i<accounts.length; ++i){
        Object[] out_row = createOutputRow(r, data.outputRowMeta.size());
        String account = accounts[i];
        get(Fields.Out, "account").setValue(out_row,account);
        putRow(data.outputRowMeta, out_row);
    }

    return true;
}

我相信我错过了调用一些管理功能,或者我应该使用除 createOutRow() 以外的其他东西。 .谷歌没有帮助。

Kettle transformation illustration

如果我创建一个如图所示的转换那么神秘
  • XLS debug A有正确 account每行中的值
  • XLS debug B有重复 account值如示例输出。

  • 如果我放置一个 Dummy前一步Select values 7 , XLS debug B变得正确和 XLS debug A变坏。

    最佳答案

    问题出在以下行(for 循环中的第一行):

    Object[] out_row = createOutputRow(r, data.outputRowMeta.size());
    

    它应该替换为以下三行:
    Object[] out_row = RowDataUtil.allocateRowData(data.outputRowMeta.size());
    for (int j=0; j<r.length; ++j)
        out_row[j] = r[j];
    

    更新 :一种更简单的方法,本质上是相同的:
    Object[] out_row = RowDataUtil.createResizedCopy(r, data.outputRowMeta.size());
    

    关于java - 水壶:processRow() 中的多个 putRows() 正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713838/

    相关文章:

    java - maven webapp-cache.xml 的问题

    java - 当我尝试使用 Selenium RC 单击“提交”按钮进入下一页时,30000 毫秒后超时

    ajax - 如何从 Pentaho xaction 输出 JSON?

    mysql - 使用 Pentaho 数据集成的 Amazon Redshift 到 Mysql

    relational-database - 如何找到给定关系的最高范式

    java - Pentaho Kettle 的 Src jar

    java - 如何在javafx中的TableView中禁用右键单击所选行?

    java - Spring 4、JBoss 7、@Configuration Bean 等效 XML - Spring Transactions

    python - 使用指定边缘归一化的 Numpy 直方图 python

    r - R中的Neuralnet包大错误