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|
#+------+------+------+------+--------------------------------------------------------------+
我正在尝试创建一个使用 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|
#+------+------+------+------+--------------------------------------------------------------+