여기에는 UDF가 필요하지 않습니다. Column
이미 인스턴스 와 함께 cast
메소드 를 제공 합니다 .DataType
from pyspark.sql.types import DoubleType
changedTypedf = joindf.withColumn("label", joindf["show"].cast(DoubleType()))
또는 짧은 문자열 :
changedTypedf = joindf.withColumn("label", joindf["show"].cast("double"))
표준 문자열 이름 (다른 변형도 지원 될 수 있음)은 simpleString
값에 해당 합니다. 따라서 원자 유형의 경우 :
from pyspark.sql import types
for t in ['BinaryType', 'BooleanType', 'ByteType', 'DateType',
'DecimalType', 'DoubleType', 'FloatType', 'IntegerType',
'LongType', 'ShortType', 'StringType', 'TimestampType']:
print(f"{t}: {getattr(types, t)().simpleString()}")
BinaryType: binary
BooleanType: boolean
ByteType: tinyint
DateType: date
DecimalType: decimal(10,0)
DoubleType: double
FloatType: float
IntegerType: int
LongType: bigint
ShortType: smallint
StringType: string
TimestampType: timestamp
예를 들어 복잡한 유형
types.ArrayType(types.IntegerType()).simpleString()
'array<int>'
types.MapType(types.StringType(), types.IntegerType()).simpleString()
'map<string,int>'
col
기능을 사용하는 것도 작동합니다.from pyspark.sql.functions import col
,changedTypedf = joindf.withColumn("label", col("show").cast(DoubleType()))