gpt4 book ai didi

scala - 检查列数据类型并仅在 Spark SQL 中对 Integer 和 Decimal 执行 SQL

转载 作者:行者123 更新时间:2023-12-01 09:47:47 26 4
gpt4 key购买 nike

我正在尝试检查输入 Parquet 文件中列的数据类型,如果数据类型是 Integer 或 Decimal,则运行 Spark SQL。

//get Array of structfields 
val datatypes = parquetRDD_subset.schema.fields

//Check datatype of column
for (val_datatype <- datatypes) if (val_datatype.dataType.typeName == "integer" || val_datatype.dataType.typeName.contains("decimal"))
{
//get the field name
val x = parquetRDD_subset.schema.fieldNames

val dfs = x.map(field => spark.sql(s"select 'DataProfilerStats' as Table_Name,(SELECT 100 * approx_count_distinct($field)/count(1) from parquetDFTable) as Percentage_Unique_Value from parquetDFTable"))

}

问题是,虽然数据类型验证成功,但在获取字段名称后的 for 循环内,它实际上并没有将列限制为整数或小数,而是对所有列类型甚至字符串执行查询出色地。我们如何获得只有十进制或整数的字段。我们如何解决这个问题。

最佳答案

这是你如何过滤整数和 double 类型的列

// fiter the columns 
val columns = df.schema.fields.filter(x => x.dataType == IntegerType || x.dataType == DoubleType)

//use these filtered with select
df.select(columns.map(x => col(x.name)): _*)

希望对您有所帮助!

关于scala - 检查列数据类型并仅在 Spark SQL 中对 Integer 和 Decimal 执行 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com