获取 Apache spark 数据集中包含的列的列数据类型
Posted
技术标签:
【中文标题】获取 Apache spark 数据集中包含的列的列数据类型【英文标题】:Get column data type of a column contained in a Apache spark data set 【发布时间】:2018-02-07 14:50:20 【问题描述】:我正在尝试查找是否有一种方法可以使用 java 获取包含在 Apache spark 数据集中的列的数据类型?
我有一个数据集,其中包含一个名为 SSN
的列,我编写了这段代码来修剪该列中的数据:
Dataset<Row> trimmedOutput = trimInput.select(trim(trimInput.col("SSN")).as("SSN")
我正在尝试获取 SSN
列的数据类型,以根据预期类型对其进行验证。
有人可以帮帮我吗?
【问题讨论】:
除非您向我们提供 minimal reproducible example 以供使用,否则不会。 :) 在 scala 中你可以做trimmedOutput.schema.fields(0).dataType.typeName
,也许这也适用于 java
@philantrovert 这个问题是在您发表评论后编辑的吗?因为我看到这个问题有足够的信息来回答。
【参考方案1】:
我来这里是为了寻找相同的答案 :) 现在查看 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”列是否为字符串类型,如果不是,它将失败并显示您作为最后一个参数传递的消息 - “列 SSN 的数据类型不匹配”。此方法仅适用于 ml 库中的 SchemUtils 类。
【讨论】:
以上是关于获取 Apache spark 数据集中包含的列的列数据类型的主要内容,如果未能解决你的问题,请参考以下文章
将值转换为 Spark 数据集中的列(将列的键和值对转换为常规列)[重复]