Python 如何一次转换多个Spark dataframe列类型?

Python 如何一次转换多个Spark dataframe列类型?,python,apache-spark,dataframe,pyspark,apache-spark-sql,Python,Apache Spark,Dataframe,Pyspark,Apache Spark Sql,我的Spark数据框中有1000列。我在下面有一个函数来逐个转换列类型。但我希望能够同时将所有列类型转换为double类型。下面的代码对于一次处理一列非常有用 def convertcolumn(df, name, new_type): df_1 = df.withColumnRenamed(name, "swap") return df_1.withColumn(name, df_1["swap"].cast(new_type)).drop("swap") 例如,可以折叠柱:

我的Spark数据框中有1000列。我在下面有一个函数来逐个转换列类型。但我希望能够同时将所有列类型转换为double类型。下面的代码对于一次处理一列非常有用

def convertcolumn(df, name, new_type):
    df_1 = df.withColumnRenamed(name, "swap")
    return df_1.withColumn(name, df_1["swap"].cast(new_type)).drop("swap")

例如,可以折叠柱:

from functools import reduce

mapping = [("x", "double"), ("y", "integer")]
df = sc.parallelize([("1.0", "1", "foo")]).toDF(["x", "y", "z"])
reduce(lambda df, kv: convertcolumn(*(df, ) + kv), mapping, df)
或者只需构建表达式列表,然后
选择

from pyspark.sql.functions import col

mapping_dict = dict(mapping)

exprs = [col(c).cast(mapping[c]) if c in mapping_dict else c for c in df.columns]
df.select(*exprs)

@谢谢你的回复。我已经在使用spark 1.6.3(pyspark),但仍然面临这个问题。我的代码花了3个多小时,仍然没有完成。请给出一些建议。1.6中pyspark ml.pipeline中的ThanksAlso没有setCheckpointInterval参数。