PySpark - 使用列值格式化字符串

PySpark - Format String using Column Values

我正在尝试创建一个使用 4 列创建字符串的新列。

df.withColumn("input",
                    F.lit("http://address.com/process?field1={}&field2={}&field3={}&field4={}".format(F.col('field1'),F.col('field2'),F.col('field3'),F.col('field4'))).show()

但是,当我尝试将列值插入字符串时,它显示为 field1=Column<'field1'> 而不是实际值。我也尝试将其包装在 F.format_string 中,但我没有得到实际值。

所以它应该返回的是这样的,假设每一列都有一个 string = VALUE

http://address.com/process?field1=VALUE&field2=VALUE&field3=VALUE&field4=VALUE

你应该使用 concat,而不是 lit,所以像 F.concat(F.lit('http://example.com/'), F.col('field1'), F.lit('/'), F.col('field2'))

您可以像这样使用 format_string 函数:

import pyspark.sql.functions as F

df = df.withColumn(
    "input",
    F.format_string(
        "http://address.com/process?field1=%s&field2=%s&field3=%s&field4=%s",
        F.col('field1'), F.col('field2'), F.col('field3'), F.col('field4')
    )
)

df.show(truncate=False)

#+------+------+------+------+--------------------------------------------------------------+
#|field1|field2|field3|field4|input                                                         |
#+------+------+------+------+--------------------------------------------------------------+
#|a     |b     |c     |d     |http://address.com/process?field1=a&field2=b&field3=c&field4=d|
#+------+------+------+------+--------------------------------------------------------------+