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

ASU*_*_TY 4 apache-spark-sql pyspark

我想将字符串添加到现有列。例如,df['col1']具有等值'1', '2', '3',我想'000'在其左侧合并字符串,col1因此我可以将列(新列或替换旧列都无所谓)'0001', '0002', '0003'

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

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

谢谢!

pau*_*ult 10

这里的另一个选项是使用pyspark.sql.functions.format_string()它允许您使用Cprintf样式格式

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

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|
#+----+----+
Run Code Online (Sandbox Code Playgroud)

这里的格式"%03d"意味着打印一个整数,最多填充 3 个零。这就是为什么10被映射到010并且100根本不改变的原因。

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

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


Ste*_*ack 6

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
Run Code Online (Sandbox Code Playgroud)

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

  • 嗨史蒂文,谢谢你的帮助!我认为您的解决方案适用于我的情况,我做了一些修改以适合我的情况,如 df = df.withColumn('col1', concat(lit("000"), col("col1"))) 。此外,使用 lit 是添加常量来修改 pyspark 中列值的唯一方法吗?因为在熊猫中,我只会使用 df['col1']='000' + df['col1'] 但不确定是否在 pyspark 中,会有多种方法来实现它! (2认同)
  • 这并没有真正回答OP提出的问题,它只是展示了如何连接两列。 (2认同)