【发布时间】:2026-01-21 06:15:01
【问题描述】:
我的数据框中有一列名为“数据”,如下所示:
{"blah:"blah","blah":"blah"""10/7/17service
我想将其分成三个不同的列,如下所示:
col1: {"blah:"blah","blah":"blah"""
col2: 10/7/17
col3: service
我已经尝试过这种方法:
val separate = df.withColumn("col1", regexp_extract($"data", "(/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/)", 1)
.withColumn("col2",regexp_extract($"data", "(/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/)", 2))
但是这个正则表达式并没有真正让我通过门。我觉得我错过了一些关于 regex 运算符在 Spark 中的工作方式。有什么想法吗?
非常感谢!! :)
列的编辑规则:
- col1:日期值之前
- col2:日期值
- col3:在日期值之后
【问题讨论】:
-
cols 的规则是什么?col1:匹配直到找到最后一个"、col2:日期和col3:字符串的其余部分?这是你想要的regex101.com/r/TK2LrZ/1吗? -
是的,正则表达式有效!但是我如何在 spark scala 代码中实现它呢?我尝试将其用作模式,但效果不佳。
-
我不是 scala 专家,但您可以尝试使用
regexp_extract($"data", "(.+\")(\\d{1,2}\\/\\d{1,2}\\/\\d{1,2})(.+)", 1)看看它是否有效吗? -
哇!好的,这让我获得了第一列,不知道如何让其他列工作。
标签: regex scala apache-spark