首页 > 解决方案 > 如何在pyspark中最后一个下划线之后提取所有元素?

问题描述

我有一个 pyspark 数据框,其中有一列我试图从中提取信息。举个例子,该列是 4 个外键的组合,如下所示:

例 1:12345-123-12345-4

例 2:5678-4321-123-12

我正在尝试提取字符串的最后一段,在本例中为 4 和 12。关于如何做到这一点的任何想法?

我尝试了以下方法:

df.withColumn("result", sf.split(sf.col("column_to_split"), '\_')[1])\
  .withColumn("result", sf.col("result").cast('integer'))

但是,两位数的结果为空,并且它只返回一个整数(0-9)

谢谢!

标签: pythonpysparkpyspark-sqlpyspark-dataframes

解决方案


Mohammad 的回答非常干净,也是一个不错的解决方案。但是,如果您需要 Spark 版本 < 2.4 的解决方案,您可以利用反转字符串功能并获取第一个元素,将其反转并变成整数,fe:

import pandas as pd
import pyspark.sql.functions as f
import pyspark.sql.types as t

df = pd.DataFrame()
df['column_to_split'] = ["12345-123-12345-4", "5678-4321-123-12"]
df = spark.createDataFrame(df)

df.withColumn("result", 
              f.reverse(f.split(f.reverse("column_to_split"), "-")[0]). \
               cast(t.IntegerType())).show(2, False)

+-----------------+------+
|column_to_split  |result|
+-----------------+------+
|12345-123-12345-4|4     |
|5678-4321-123-12 |12    |
+-----------------+------+

推荐阅读