繁体   English   中英

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

[英]How to change multiple columns' types in pyspark?

我正在研究 pyspark。我想像这样更改列类型:

df1=df.select(df.Date.cast('double'),df.Time.cast('double'),
          df.NetValue.cast('double'),df.Units.cast('double'))

可以看到 df 是一个数据框,我 select 4列,全部改成double。 由于使用 select,所有其他列都将被忽略。

但是,如果 df 有数百列,我只需要更改这 4 列。 我需要保留所有列。 那么,怎么做呢?

尝试这个:

from pyspark.sql.functions import col

df = df.select([col(column).cast('double') for column in df.columns])
for c in df.columns:
    # add condition for the cols to be type cast
    df=df.withColumn(c, df[c].cast('double'))

另一种使用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()

检查类型文档。

我知道您希望有一个非循环答案,它保留原始列集,同时只更新一个子集。 以下应该是您正在寻找的答案:

from pyspark.sql.functions import col

df = df.select(*(col(c).cast("double").alias(c) for c in subset),*[x for x in df.columns if x not in subset])

其中subset是您要更新的列名列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM