使用 pentaho 计算每列空值的数量

Count the number of null value per column with pentaho

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

我们期望输出中有这个其他文件:

我知道如何计算每行空值的数量,但是我不知道如何计算每列空值的数量。

请将以下步骤拖放到 canvas。

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

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

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

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

skype_id : 帕纳巴卡文卡特斯

必须有更好的方法来做到这一点,但我做了一个非常讨厌的 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);
}