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)
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
归档时间: |
|
查看次数: |
7828 次 |
最近记录: |