如何将PySpark DataFrame中Order Id列类型从String转为Int?
PySpark将String类型的Order Id列转为Int类型
方法一:读取CSV时直接指定Schema(推荐)
读取阶段就定义好列类型,避免后续转换,效率更高:
from pyspark.sql.types import StructType, StructField, IntegerType, StringType, DoubleType # 根据你的CSV实际列结构定义Schema,示例如下 schema = StructType([ StructField("Order Id", IntegerType(), nullable=True), StructField("Product", StringType(), nullable=True), StructField("Quantity Ordered", IntegerType(), nullable=True), StructField("Price Each", DoubleType(), nullable=True) ]) df = spark.read.csv("Sales_December.csv", header=True, schema=schema) df.printSchema()
方法二:读取后转换列类型
如果已经完成CSV读取,可通过以下方式修改列类型:
方式1:使用withColumn + cast
# 两种写法都可行 from pyspark.sql.types import IntegerType # 写法1:用类型对象 df = df.withColumn("Order Id", df["Order Id"].cast(IntegerType())) # 写法2:用字符串指定类型 df = df.withColumn("Order Id", df["Order Id"].cast("int")) df.printSchema()
方式2:使用selectExpr
注意列名含空格时需用反引号包裹:
df = df.selectExpr("cast(`Order Id` as int) as `Order Id`", "*") df.printSchema()
处理转换失败的情况
如果Order Id列存在非数字内容(如空值、字母),直接转换会报错,可使用try_cast(Spark 3.0+支持)返回null而非报错:
from pyspark.sql.functions import try_cast df = df.withColumn("Order Id", try_cast(df["Order Id"], IntegerType()))
内容的提问来源于stack exchange,提问作者Sahand Pourjavad
相关产品推荐
相关产品推荐

