更改 DataFrame 中的列数据类型并将其传递到 UDF - PySpark
Posted
技术标签:
【中文标题】更改 DataFrame 中的列数据类型并将其传递到 UDF - PySpark【英文标题】:Changing Columns DataTypes in a DataFrame and pass it into a UDF - PySpark 【发布时间】:2018-05-24 11:58:26 【问题描述】:我目前正在解决一个问题,该问题涉及更改 DataFrame
中多个 Columns
的类型,但我不确定如何将其传递给 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,但也不确定如何做到这一点。
任何帮助将不胜感激。
【问题讨论】:
我想知道你为什么需要一个UDF?您的代码应该可以正常工作,以便更改列的 dtypes。 @pansen 我想要一个 udf 以便将此 udf 放入管道中,因为仅使用此函数无法进入管道我实际上设法使用 SQLTransformer 找到解决方法 对,这是有道理的。感谢您分享您的答案。 【参考方案1】:我设法使用 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)
希望它对其他人也有帮助。
【讨论】:
以上是关于更改 DataFrame 中的列数据类型并将其传递到 UDF - PySpark的主要内容,如果未能解决你的问题,请参考以下文章