python - 如何在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)
谢谢!
解决方案
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 |
+-----------------+------+
推荐阅读
- ruby-on-rails - Bundle update mini_racer 正在更新 rails,即使它不应该更新?
- android - 如何在颤动中按字母顺序对外部存储中的歌曲列表进行排序
- javascript - What is the difference between Primitive data type and Non - Primitive data type in JavaScript?
- java - 如何使用不同的类对象制作二维数组?
- android-studio - 拖放功能在 Android Studio 中不起作用。甚至不能点击显示属性
- c - 尽管条件满足,但循环不会停止
- python - 为什么java重定向失败?
- sql - SQL Server : Procedure, setting value for the variables
- kotlin - Kotlin 1.3.11 has broken null-safety?
- reactjs - 检测用户何时离开单页应用