获取Apache spark数据集中包含的列的列数据类型

时间:2018-02-07 14:50:21

标签: apache-spark

我试图找到是否有办法使用java获取Apache spark数据集中包含的列的数据类型? 我有一个数据集,其中包含一个名为SSN的列,我编写了这段代码来修剪该列中的数据:

Dataset<Row> trimmedOutput = trimInput.select(trim(trimInput.col("SSN")).as("SSN")

我正在尝试获取SSN列的数据类型,以根据预期类型对其进行验证。 有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

我来这里寻找相同的答案:)现在看一下API,这是我能想到的一种方法:

public static String dataTypeString(Dataset<Row> dataset, String colName) {
        StructField[] fields = dataset.schema().fields();
        String dataType = null;
        for(StructField field: fields) {
            if(field.name().equals(colName)) {
                dataType =  field.dataType().typeName();
                break;
            }
        }
        return dataType;
    }

要了解trimmedOutput数据集中的SSN列的数据类型,请按以下方式使用它:

dataTypeString(trimmedOutput, "SSN") 

还有一个类似的方法simpleString()可以代替typeName()调用,API文档提到了两者之间的区别。

如果您打算检查数据集中的某列是否具有某种数据类型,如果不是,则失败,以下代码将有所帮助:

SchemaUtils.checkColumnType(holdoutResults.schema(), 
                            "SSN", 
                            DataTypes.StrringType, 
                           "Datatype Mismatch for column SSN");

上面的调用将检查'SSN'列是否为String类型,如果不是,则失败,它将显示您作为最后一个参数传递的消息-“ SSN列的数据类型不匹配”。此方法仅在ml库中的SchemUtils类上可用。