簡體   English   中英

如何一次轉換許多Spark dataframe列類型?

[英]How to convert many Spark dataframe column types at once?

我的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)

或者只是構建一個表達式列表,然后select

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM