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

在pyspark中,如何将/concat字符串添加到列中?,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我想向现有列添加一个字符串。例如,df['col1']的值为'1',2',3'等,我想在col1的左边加上字符串'000',这样我就可以得到一个列(新的或替换旧的并不重要),如'0001',0002',0003' 我想我应该使用df.withColumn('col1','000'+df['col1'])但当然它不起作用,因为pyspark数据帧是不可变的 这应该是一个简单的任务,但我没有在网上找到任何东西。希望有人能给我一些帮助 谢谢大家! from pyspark.sql.functions

我想向现有列添加一个字符串。例如,
df['col1']
的值为
'1',2',3'
等,我想在
col1
的左边加上字符串
'000'
,这样我就可以得到一个列(新的或替换旧的并不重要),如
'0001',0002',0003'

我想我应该使用
df.withColumn('col1','000'+df['col1'])
但当然它不起作用,因为pyspark数据帧是不可变的

这应该是一个简单的任务,但我没有在网上找到任何东西。希望有人能给我一些帮助

谢谢大家!

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

这里的另一个选项是使用,它允许您使用

下面是一个示例,其中列中的值是整数

导入pyspark.sql.f函数
df=sqlCtx.createDataFrame([(1,),(2,),(3,),(10,),(100,),[“col1”])
df.withColumn(“col2”,f.format_字符串(“%03d”,“col1”)).show()
#+----+----+
#|col1 | col2|
#+----+----+
#|   1| 001|
#|   2| 002|
#|   3| 003|
#|  10| 010|
#| 100| 100|
#+----+----+
这里的格式
“%03d”
意味着打印一个整数,并用最多3个零填充。这就是为什么
10
被映射到
010
并且
100
一点也不改变的原因

或者如果您想在前面加上3个零:

df.withColumn(“col2”,f.format_字符串(“000%d”,“col1”)).show()
#+----+------+
#|col1 | col2|
#+----+------+
#|   1|  0001|
#|   2|  0002|
#|   3|  0003|
#|  10| 00010|
#| 100|000100|
#+----+------+

你好,史蒂文,谢谢你的帮助!我认为您的解决方案适用于我的案例,我做了一些修改以适合我的案例,如df=df.withColumn('col1',concat(lit(“000”),col(“col1”))。此外,使用lit是否是在pyspark中添加常量以修改列值的唯一方法?因为在pandas中,我只会使用df['col1']='000'+df['col1'],但不确定在pyspark中是否会有多种方法来实现它!这并没有真正回答OP提出的问题,它只是展示了如何连接两列。对于同一问题,python 2.7的替代方案是什么?这是一个更一般的答案,示例解决了确切的问题,但是我发现前一个对于我发现这个问题时所寻找的内容更有用。多样化就是黄金!