如何在pyspark中更改多个列的类型?

时间:2019-04-01 02:46:10

标签: python select types casting pyspark

我正在学习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列。我需要保留所有列。那么,怎么做呢?

3 个答案:

答案 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 文档。