apache-spark - 通过从另一列解析字符串来创建列
问题描述
我有两个想要加入的数据框。
一个数据框是这样的,其中syscode_ntwrk
被破折号分割。
spark.createDataFrame(
[
(1, '1234 - ESPN'),
(2, '1234 - ESPN'),
(3, '963 - CNN'),
(4, '963 - CNN'),
],
['id', 'col1']
)
而另一种就是这种格式, wheresyscode_ntwrk
是串联在一起的。
spark.createDataFrame(
[
(100, '1234ESPN'),
(297, '1234ESPN'),
(3989, '963CNN'),
(478, '963CNN'),
],
['counts', 'col1']
)
在第二个数据框中有没有办法创建一个新列来匹配第一个数据框syscode_ntwrk
?Syscode
将始终是一组数字,并且ntwrk
始终是一组字母,那么是否有正则表达式可以在两者之间添加空格破折号空格?
解决方案
您可以使用regexp_extract
提取组并使用concat_ws
将组转换为您想要的。
import pyspark.sql.functions as F
df = spark.createDataFrame(
[
(100, '1234ESPN'),
(297, '1234ESPN'),
(3989, '963CNN'),
(478, '963CNN'),
],
['counts', 'col1']
)
df.select(
F.concat_ws(
' - ',
F.regexp_extract('col1', '(\d+)([a-zA-Z]+)', 1),
F.regexp_extract('col1', '(\d+)([a-zA-Z]+)', 2)
).alias('parsed')
).show()
+-----------+
| parsed|
+-----------+
|1234 - ESPN|
|1234 - ESPN|
| 963 - CNN|
| 963 - CNN|
+-----------+
推荐阅读
- c++ - 如何在类之外定义函数
- regex - 用于获得最多 2 级路径的正则表达式
- javascript - 当ul为空添加li标签时如何将jquery转换为React JS?
- reactjs - 在 React Native Expo 中为 App 组件创建包装器
- c++ - 使用 cmake 将第三方共享库(*.so)集成到多个项目中
- jquery - 选项卡中的 Jquery 可嵌套列表菜单
- python-3.x - 无法在 Airflow 中将 DAG 名称提取到 JSON 中
- jquery - 如何使用 Jquery 验证检查名称数组字段?
- laravel - laravel 分页不适用于使用 withPagination
- react-navigation-v6 - React Navigation 6 (RN6) - 模态中的卡片堆栈