Pyspark - 将字符串转换为数组

问题描述 投票:0回答:1

我有一个数据框,它有字符串值,我有一个数组。


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 ++。因此,需要最有效的方法将其转换为数组。还将添加更多键。

apache-spark pyspark azure-databricks
1个回答
0
投票

我建议你使用装饰器来指定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)
© www.soinside.com 2019 - 2024. All rights reserved.