You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:50:51