我有一个如下的pyspark数据框
+---+-------------------------------------------------------------------------------+
|id |strval |
+---+-------------------------------------------------------------------------------+
|1 |{"position":"left","title":"journeys","link":"https://www.abcd.com","rank":549}|
|2 |{"position":"left","title":"journeys","link":"https://www.abcd.com","rank":5} |
+---+-------------------------------------------------------------------------------+
我只想使用我在下面代码中尝试过的regexp来查找rank的值
select id,
regexp_extract("strval", '(\"rank\":)(\d+)',2) as rn
from tbl
但是我得到的只是空的值。有人能指导我实现这一点吗?
1条答案
按热度按时间jdgnovmf1#
这里你应该避免使用regex,而是应该 parse 你的JSON内容来提取
rank
键。假设你使用的是PySpark 1.6+,我们可以尝试:假设您想继续通过Spark SQL解决这个问题,那么您已经走上了正确的道路。我建议不要将列名放在双引号中,因为这可能会被误认为是字符串文字。此外,您只需要使用一个捕获组来表示数字排名: