我有一个数据框,它有字符串值,我有一个数组。
alg_mappings = {
('Full Cover', 40): [['base,permitted_usage'],['si_mv'],['suburb']]# Add more values as needed
}
default_value = None
def get_alg_value(sub_class, version_number):
return alg_mappings.get((sub_class, version_number), default_value)
get_alg_value_udf = F.udf(get_alg_value)
df_with_alg = df.withColumn("alg", get_alg_value_udf(F.col("sub_class"), F.col("version")))
alg 列是一个字符串,但我希望它是一个具有精确格式的数组元素
[['base,permitted_usage'],['si_mv'],['suburb']]
我将向其中添加更多元素,因此它的大小甚至可以为 25 ++。因此,需要最有效的方法将其转换为数组。还将添加更多键。
我建议你使用装饰器来指定UDF上的输出数据类型。默认为字符串,因此您可以获得输出的字符串表示形式。
输出为字符串列表
@udf(ArrayType(StringType()))
def get_alg_value(sub_class, version_number):
return alg_mappings.get((sub_class, version_number), default_value)
输出为字符串列表列表
@udf(ArrayType(ArrayType(StringType())))
def get_alg_value(sub_class, version_number):
return alg_mappings.get((sub_class, version_number), default_value)