[英]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.