我试图将列在具有像“A1”,“C2”和“B9”字符串值星火(使用pyspark),并用字符串中的每个元素创建新列。如何从字符串中提取值来创建新列?
我如何把这个:
| id | col_s |
|----|-------|
| 1 | 'A1' |
| 2 | 'C2' |
这个:
| id | col_s | col_1 | col_2 |
|----|-------|-------|-------|
| 1 | 'A1' | 'A' | '1' |
| 2 | 'C2' | 'C' | '2' |
我一直在寻找通过文档失败。
您可以使用expr
(读here)和substr
(读here)提取你想要的字符串。在substr()
函数,第一个参数是列,第二个参数是从要开始提取和第三个参数是要提取的字符串的长度的索引。注:1个它基于索引,而不是作为基于0。
from pyspark.sql.functions import substring, length, expr
df = df.withColumn('col_1',expr('substring(col_s, 1, 1)'))
df = df.withColumn('col_2',expr('substring(col_s, 2, 1)'))
df.show()
+---+-----+-----+-----+
| id|col_s|col_1|col_2|
+---+-----+-----+-----+
| 1| A1| A| 1|
| 2| C1| C| 1|
| 3| G8| G| 8|
| 4| Z6| Z| 6|
+---+-----+-----+-----+
我能回答我的问题在这里张贴5分钟后...
split_col = pyspark.sql.functions.split(df['COL_NAME'], "")
df = df.withColumn('COL_NAME_CHAR', split_col.getItem(0))
df = df.withColumn('COL_NAME_NUM', split_col.getItem(1))