Python 如何使用spark/pyspark从字符串中的每个元素创建新列

Python 如何使用spark/pyspark从字符串中的每个元素创建新列,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我试图在Spark中获取一个列(使用pyspark),该列具有像“A1”、“C2”和“B9”这样的字符串值,并使用字符串中的每个元素创建新列。如何从字符串中提取值以创建新列 我该如何扭转这种局面: | id | col_s | |----|-------| | 1 | 'A1' | | 2 | 'C2' | 为此: | id | col_s | col_1 | col_2 | |----|-------|-------|-------| | 1 | 'A1' | 'A' |

我试图在Spark中获取一个列(使用pyspark),该列具有像“A1”、“C2”和“B9”这样的字符串值,并使用字符串中的每个元素创建新列。如何从字符串中提取值以创建新列

我该如何扭转这种局面:

| id | col_s |
|----|-------|
| 1  | 'A1'  |
| 2  | 'C2'  |
为此:

| id | col_s | col_1 | col_2 |
|----|-------|-------|-------|
| 1  | 'A1'  | 'A'   |  '1'  |
| 2  | 'C2'  | 'C'   |  '2'  |

我一直在看文件,但没有成功

我在这里发帖5分钟后就可以回答自己的问题了

split\u col=pyspark.sql.functions.split(df['col\u NAME'],“”)
df=df.withColumn('COL\u NAME\u CHAR',split\u COL.getItem(0))
df=df.withColumn('COL\u NAME\u NUM',split\u COL.getItem(1))

您可以使用
expr
(读取)和
substr
(读取)来提取所需的子字符串。在
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|
+---+-----+-----+-----+