我正在学习pyspark。我想这样更改列类型:
df1=df.select(df.Date.cast('double'),df.Time.cast('double'),
df.NetValue.cast('double'),df.Units.cast('double'))
您会看到df是一个数据帧,我选择了4列并将它们全部更改为double。由于使用了select,因此将忽略所有其他列。
但是,如果df有数百列,而我只需要更改这4列。我需要保留所有列。那么,怎么做呢?
答案 0 :(得分:1)
for c in df.columns:
# add condition for the cols to be type cast
df=df.withColumn(c, df[c].cast('double'))
答案 1 :(得分:0)
尝试一下:
from pyspark.sql.functions import col
df = df.select([col(column).cast('double') for column in df.columns])
答案 2 :(得分:0)
另一种使用 selectExpr()
的方式:
df1 = df.selectExpr("cast(Date as double) Date",
"cast(NetValueas string) NetValue")
df1.printSchema()
使用 withColumn()
:
from pyspark.sql.types import DoubleType, StringType
df1 = df.withColumn("Date", df["Date"].cast(DoubleType())) \
.withColumn("NetValueas ", df["NetValueas"].cast(StringType()))
df1.printSchema()
检查 types 文档。