首页 > 解决方案 > PySpark - 使用列值格式化字符串

问题描述

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

标签: apache-sparkpysparkapache-spark-sql

解决方案


您可以使用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|
#+------+------+------+------+--------------------------------------------------------------+

推荐阅读