如何在Spark中检查列数据类型

3

我有一种缺失值填充方法可以进行平均数、中位数和众数操作,但如果列的数据类型不是Double / Float,则该方法会失败。
我的Java代码:

Imputer imputer = new Imputer().setInputCol("amount").setOutputCol("amount);
                                
imputer.setStrategy("mean");
ImputerModel model = imputer.fit(dataset);
model.transform(dataset);

有没有什么方法可以处理这个问题?
我正在使用Java。

1个回答

1

我可以提供一种方式,但不确定这是否是最佳方法。
步骤1:获取字段详细信息,这将返回StructField[]
步骤2:遍历接收到的数组并检查列的数据类型。

private boolean isValidColumnTypes(String[] columnArray, Dataset<?> dataset) {
        StructField[] fieldArray = dataset.schema().fields();
        for (int i = 0; i < columnArray.length; i++) {
            for (StructField data : fieldArray) {
                    boolean doubleType=data.dataType().toString().equals("DoubleType");
                    boolean floatType=data.dataType().toString().equals("FloatType");   
                    if (columnArray[i].equals(data.name()) && !(doubleType ||floatType)){
                    return false;
                }
            }
        }
        return true;
    }

在上述方法中,我将列名作为字符串数组 String[] columnArray 传递。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接