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

时间:2019-02-03 05:12:24

标签: python apache-spark pyspark apache-spark-sql

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

我该如何转动:

virtual

对此:

| id | col_s |
|----|-------|
| 1  | 'A1'  |
| 2  | 'C2'  |

我一直在浏览文档失败。

2 个答案:

答案 0 :(得分:0)

在此发布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))

答案 1 :(得分:0)

您可以使用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|
+---+-----+-----+-----+