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

时间:2018-03-21 04:01:29

标签: pyspark apache-spark-sql

我想在现有列中添加一个字符串。例如,df['col1']的值为'1', '2', '3'等,我想在'000'的左侧连接字符串col1,这样我就可以获得一个列(新的或替换旧的)一个无所谓)'0001', '0002', '0003'

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

此处的另一个选项是使用pyspark.sql.functions.format_string(),您可以使用C printf style formatting

这是一个示例,其中列中的值是整数。

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个零的整数。这就是10映射到010100根本没有变化的原因。

或者如果你想在前面添加3个零:

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