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

6kkfgxo0  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(359)

我试图找出是否有一种方法可以使用java获取apachespark数据集中包含的列的数据类型?我有一个数据集,其中包含一个名为 SSN 我写了这段代码来修剪那列中的数据:

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

我正在尝试获取 SSN 列以根据预期类型验证它。
有人能帮我吗?

nwwlzxa7

nwwlzxa71#

我来这里寻找相同的答案:)现在看看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'列if是否为string类型,如果不是,它将失败,并显示您作为最后一个参数传递的消息-“datatype mismatch for column ssn”。此方法仅在ml库中的schemutils类上可用。

相关问题