Pyspark:基于空格和连字符将多个值从列提取到新列中

bwntbbo3  于 2024-01-06  发布在  Spark
关注(0)|答案(2)|浏览(186)

我有一个带有forenames列的字符串。我必须创建一个新列first_name,它在第一个空格之前有第一个字符串,或者如果连字符出现在forenames中第一个空格之前的第一个字符串中。

  1. |forenames | first_name |
  2. +--------+---------------------+
  3. |IVO-KAI ROGERS | IVO-KAI |
  4. |DYLAN STUART JOHN| DYLAN |
  5. |JOSH JACK | JOSH |
  6. |MONALISA ELIEN | MONALISA |
  7. |RACHEL- GREEN JOE|RACHEL-GREEN|

字符串
我必须创建另一个新的列middle_name,它将在第一个空格后面跟着first_name的forenames中包含第二个字符串。预期输出将是:

  1. |forenames | first_name | middle_name |
  2. +--------+---------------------+-------------+
  3. |IVO-KAI ROGERS | IVO-KAI | ROGERS |
  4. |DYLAN STUART JOHN| DYLAN | STUART JOHN |
  5. |JOSH JACK | JOSH | JACK |
  6. |MONALISA ELIEN | MONALISA | ELIEN |
  7. |RACHEL- GREEN JOE|RACHEL-GREEN| JOE |

rryofs0p

rryofs0p1#

要根据第一次出现的空格将forenames列拆分为first_name和last_name,可以在Spark SQL中使用SPLIT和SUBSTRING_INDEX函数。下面是如何实现的。

  1. scala> val dfa = spark.sql("SELECT forenames, SUBSTRING_INDEX(forenames, ' ', 1) AS first_name, SUBSTRING(forenames, LENGTH(SUBSTRING_INDEX(forenames, ' ', 1)) + 2) AS last_name FROM df")
  2. dfa: org.apache.spark.sql.DataFrame = [forenames: string, first_name: string ... 1 more field]
  3. scala> dfa.show(false)
  4. +-----------------+----------+-----------+
  5. |forenames |first_name|last_name |
  6. +-----------------+----------+-----------+
  7. |IVO-KAI ROGERS |IVO-KAI |ROGERS |
  8. |DYLAN STUART JOHN|DYLAN |STUART JOHN|
  9. |JOSH JACK |JOSH |JACK |
  10. |MONALISA ELIEN |MONALISA |ELIEN |
  11. +-----------------+----------+-----------+

字符串

yyhrrdl8

yyhrrdl82#

你可以使用下面的pyspark代码来拆分第一列,并创建两个新闻列:

  1. df.withColumn('first_name', split(df['forenames'], ' ').getItem(0))\
  2. .withColumn('last_name', concat_ws(" ",split(df['forenames'], ' ').getItem(1), split(df['forenames'], ' ').getItem(2) ))

字符串
最好的问候,侯赛因

相关问题