在pyspark中,如何向列添加/concat字符串?

w1e3prcc  于 2023-02-03  发布在  Spark
关注(0)|答案(3)|浏览(222)

我想添加一个字符串到一个现有的列。例如,df['col1']的值为'1', '2', '3'等,我想在col1的左边连接字符串'000',这样我就可以得到一个列(新的或替换旧的无关紧要)为'0001', '0002', '0003'
我想我应该使用df.withColumn('col1', '000'+df['col1']),但当然它不工作,因为pyspark Dataframe 是不可变的?
这应该是一个简单的任务,但我没有找到任何在线。希望有人能给予我一些帮助!
谢谢大家!

olmpazwi

olmpazwi1#

from pyspark.sql.functions import concat, col, lit

df.select(concat(col("firstname"), lit(" "), col("lastname"))).show(5)
+------------------------------+
|concat(firstname,  , lastname)|
+------------------------------+
|                Emanuel Panton|
|              Eloisa Cayouette|
|                   Cathi Prins|
|             Mitchel Mozdzierz|
|               Angla Hartzheim|
+------------------------------+
only showing top 5 rows

http://spark.apache.org/docs/2.0.0/api/python/pyspark.sql.html#module-pyspark.sql.functions

ct2axkht

ct2axkht2#

这里的另一个选项是使用pyspark.sql.functions.format_string(),它允许您使用C printf样式格式。
下面是一个列中的值为整数的示例。

import pyspark.sql.functions as f
df = sqlCtx.createDataFrame([(1,), (2,), (3,), (10,), (100,)], ["col1"])
df.withColumn("col2", f.format_string("%03d", "col1")).show()
#+----+----+
#|col1|col2|
#+----+----+
#|   1| 001|
#|   2| 002|
#|   3| 003|
#|  10| 010|
#| 100| 100|
#+----+----+

这里的"%03d"表示打印一个最多用3个零填充的整数,这就是10Map到010100根本不变的原因。
或者,如果您想在前面正好添加3个零:

df.withColumn("col2", f.format_string("000%d", "col1")).show()
#+----+------+
#|col1|  col2|
#+----+------+
#|   1|  0001|
#|   2|  0002|
#|   3|  0003|
#|  10| 00010|
#| 100|000100|
#+----+------+
js4nwp54

js4nwp543#

假设您的数据框中有一个名为"column_source"的列,列号为1,2,3
| 列源|
| - ------|
| 1个|
| 第二章|
| 三个|
然后你可以使用下面的代码:

from pyspark.sql import functions as F
df = df.withColumn('column_modified', F.concat(F.lit("000"), F.col('column_source')))

输出:
| 列源|色谱柱_已修改|
| - ------|- ------|
| 1个|零零零一|
| 第二章|小零零零二|
| 三个|小零零零三|

相关问题