使用pentaho

时间:2016-02-12 17:23:04

标签: pentaho kettle

我有一个包含超过60列和2 000 000行的csv文件,我试图计算每个变量(每列)的空值数,然后计算总和新行获取整个csv中空值的总数。例如,如果我们在输入中获得此文件: Input file

我们希望输出中有另一个文件:

Output file

我知道如何计算每行的空值数,但是我没有弄清楚如何计算每列空值的数量。

2 个答案:

答案 0 :(得分:1)

请将以下步骤拖放到画布上。

step1:添加常量:创建一个名为constant且value = 1的变量

第2步:过滤行:您有所有列的过滤器空值。

step3:分组依据:这里按字段常量变量分组  聚合部分我们必须指定剩余的列,如ct_inc.And类型是数值(N)

如果您有任何疑问,请随时提出。

skype_id:panabakavenkatesh

答案 1 :(得分:1)

必须有一个更好的方法来做到这一点,但我做了一个非常讨厌的JavaScript来完成这项工作。

对于不同的列类型存在一些问题,因为它没有设置列类型。 (它应该将所有列设置为整数,但我不知道这是否可以从JavaScript。)

您必须先运行Identify last row in a stream,然后将其保存到last列(或更改脚本)。

var nulls;
var seen;

if (!seen) {
    // Initialize array
    seen = 1;
    nulls = [];
    for (var i = 0; i < getInputRowMeta().size(); i++) {
        nulls[i] = 0;
    }
}

for (var i = 0; i < getInputRowMeta().size(); i++) {
    if (row[i] == null) {
        nulls[i] += 1;
    }
    // Hack to find empty strings
    else if (getInputRowMeta().getValueMeta(i).getType() == 2 && row[i].length() == 0) {
        nulls[i] += 1;
    }
}

// Don't store any values
trans_Status = SKIP_TRANSFORMATION;

// Only store the nulls at the last row
if (last == true) {
    putRow(nulls);
}