apache-spark - 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
解决方案
您可以使用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|
#+------+------+------+------+--------------------------------------------------------------+
推荐阅读
- vue.js - Vuetify:在 v-autocomplete 中指定列表项的高度
- haskell - fmap 进入 do 块失败并出现打印错误
- css - 如何创建带有居中文本并使用 CSS 封顶的水平线?
- python - 散景:如何添加连接点的垂直线
- java - 使用 LOAD DATA INFILE LOCAL 将大型 .tsv 文件加载到数据库时如何捕获无效文件
- docker - 如何使用 docker swarm 部署 elasticsearch?
- kubernetes - 如何使用 kubectl 获取当前上下文的当前命名空间
- c# - Page_Load() 被多次调用(页面中使用的每个 JS 文件一次)并且 Page.IspostBack 为 FALSE
- python - 如何将实际位置更改为临时位置,在 MySQL 的 Python 电子邮件表上的 csv 文件中添加标题和删除空间?
- c# - 随机访问流 Azure 块存储