python-PySpark:如何判断数据框的列类型

假设我们有一个称为df的数据框.我知道有使用df.dtypes的方法.但是我喜欢类似的东西

type(123)== int#注意int不是字符串

我想知道是否有类似的东西:

type(df.select(< column_name>).collect()[0] [1])== IntegerType

基本上,我想知道从数据帧直接获取IntegerType,StringType之类的对象,然后对其进行判断的方法.

谢谢!

解决方法:

TL; DR使用外部数据类型(普通Python类型)测试值,使用内部数据类型(DataType子类)测试模式.

首先-您不应该使用

type(123) == int

检查处理继承的Python中类型的正确方法是

isinstance(123, int)

完成后,让我们来谈谈

Basically I want to know the way to directly get the object of the class like IntegerType, StringType from the dataframe and then judge it.

这不是它的工作方式.数据类型描述模式(内部表示)而不是值.外部类型是普通的Python对象,因此如果内部类型为IntegerType,则外部类型为int,依此类推,具体取决于Spark SQL Programming guide中定义的规则.

IntegerType(或其他DataTypes)实例存在的唯一位置是您的架构:

from pyspark.sql.types import *

df = spark.createDataFrame([(1, "foo")])

isinstance(df.schema["_1"].dataType, LongType)
# True
isinstance(df.schema["_2"].dataType, StringType)
# True

_1, _2 = df.first()

isinstance(_1, int)
# True
isinstance(_2, str)
# True
上一篇:34岁Java程序员裸辞,突围金三银四面试季


下一篇:34岁Java程序员裸辞,javajson中文乱码