使用spark检查列的数据类型

j0pj023g  于 2021-05-16  发布在  Spark
关注(0)|答案(2)|浏览(933)

需要帮助检查spark中的数据类型,
我需要在spark中转换这个pyspark功能

if dict(df.dtypes)['test_col'] == 'String':
...     print "it is String type"
fquxozlt

fquxozlt1#

要检查列的数据类型,请使用 schema 功能。
检查以下代码。

df
.schema
.filter(c => c.name == "test_col") // Check your column
.map(_.dataType.typeName)
.headOption
.getOrElse(None)
val dtype = df
.schema
.filter(a => a.name == "c1")
.map(_.dataType.typeName)
.headOption
.getOrElse(None)

if (dtype == "string") println("it is String type")

使用 dtypes 功能。

val dtype = df
.dtypes
.filter(_._1 == "c1")
.map(_._2)
.headOption
.getOrElse(None)

if (dtype  == "StringType" ) println("it is String type")
jq6vz3qz

jq6vz3qz2#

我修改了本文中的答案,将数据类型包括在模式中。
只需将Dataframe的模式传递给函数 flatten 它将为您提供列名及其数据类型。

def flatten(schema, prefix=None):
    fields = []
    for field in schema.fields:
        name = prefix + '.' + field.name if prefix else field.name
        dtype = field.dataType
        if isinstance(dtype, ArrayType):
            dtype = dtype.elementType

        if isinstance(dtype, StructType):
            fields += flatten(dtype, prefix=name)
        else:
            fields.append((name, dtype))

    return fields

mySchema = flatten(df.schema)
print("Schema is here", mySchema)

相关问题