python - 如何从 PySpark 列中同一子字符串的左侧和右侧提取字符?
问题描述
我的 Pyspark 数据框是这样的:
|ID|A|
+--+-------+
|1|7800028|
|2|700024|
|3|720004|
|4|70004|
|5|700004|
我想删除一起出现的 3 个零,并在单独的列中的三个零的左侧和右侧获取数字。像这样的东西:
|ID|B|C
+--+-------+
|1|78|28|
|2|7|24|
|3|72|4|
|4|7|4|
|5|70|4
问题是 col A 的长度可以不同,B 中的值范围为 0-99,C 中的值范围为 0-99。因此我似乎无法substring
用来获得 B. C 仍然可以通过substring
函数实现。
解决方案
您可以使用该模式000(?=[1-9]|0$)
来拆分字符串,其中(?=[1-9]|0$)
是一个锚点,以确保最后一个0
数字必须后跟一个非零数字或零作为整数的最后一个数字,例如:
spark.sql("""
with t as (
select *, split(A,'000(?=[1-9]|0$)') as arr
from values (1,7800028),(2,700024),(3,720004),(4,70004),(5,700004),(6,120000) as (id,A)
)
select id, A, arr[0] as B, arr[1] as C
from t
""").show()
+---+-------+---+---+
| id| A| B| C|
+---+-------+---+---+
| 1|7800028| 78| 28|
| 2| 700024| 7| 24|
| 3| 720004| 72| 4|
| 4| 70004| 7| 4|
| 5| 700004| 70| 4|
| 6| 120000| 12| 0|
+---+-------+---+---+
推荐阅读
- javascript - 拦截箭头键并发送 Enter 代替
- npm - 私有存储库 GitLab 的版本控制
- php - 如何让我的 apache 网站只接受带有特定条目的主机头
- sql-server - 是否可以生成包含序列化通用(未知)C# 对象的 Kafka 消息,并通过推断消费者中的类型来反序列化它们?
- json - 如何在结构类型的结构中统一变量
- vscode-extensions - 有没有办法使用 Ctrl + Click 来触发命令作为 VS Code 扩展的一部分?
- c# - 在客户端机器上使用 CefSharp 的 Javascript 注册对象问题
- reactjs - 在 ReactJS 中访问完整的日历 API
- javascript - React-Chart.js 图例 onClick 函数
- android - 在我的屏幕录制应用程序中创建文件路径时出错