代码之家  ›  专栏  ›  技术社区  ›  Flika205

更改数据帧中的列数据类型并将其传递到udf-pyspark

  •  0
  • Flika205  · 技术社区  · 8 年前

    我目前正在研究一个涉及改变几种类型的问题 Columns 在一个 DataFrame 但是我不知道怎么把它传给 udf 因为我创建的函数 dictionary 因此,我不知道如何将函数传递给 UDF .

    我当前拥有的所有数据类型都是类型 String 但是正如我提到的,我需要将它们更改为不同的类型,例如 Integer & Date .

    我的函数是这样的:

    def columns_types_transformer(df, reformating_dict):
        for column, new_type in reformating_dict.items():
            df = df.withColumn(column, df[column].cast(new_type))
        return df
    

    我要传递的词典如下所示:

    dictionary = {'date1': DateType(), 'date2': DateType(), 'date3': DateType(), 'date4': DateType(), 'date5': DateType(), 'date6': DateType(), 'integer1': IntegerType()}
    

    我这里的问题是如何将具有正确类型的字典传递到UDF中? 我考虑的另一种方法是使用sqlTransformer,但也不确定如何做到这一点。

    任何帮助都将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Flika205    8 年前

    我用sqlTransformer解决了这个问题。

    这就是我所做的

    sqlTrans_formatter = SQLTransformer(statement="SELECT CAST(date1 AS date), CAST(date2 AS date), CAST(date3 AS date), CAST(date4 AS date), CAST(date5 AS date), CAST(date6 AS date), CAST(integer1 AS int) FROM __THIS__")
    
    df = sqlTrans_formatter.transform(ddf)
    

    希望对其他人也有帮助。