假设我们有一个称为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