如何从pyspark中的字符串中提取时间

时间:2017-07-14 23:22:46

标签: python regex apache-spark pyspark

我有一个字符串,其中包含以下模式中的时间,我想在pyspark中提取

......&eventTime=2017-02-22T01%3a02%3a07.1816943Z&......

这是我尝试但没有奏效的; df_event.EventParameters是一个包含时间的列。

df_localTime = pyspark.sql.functions \
          .regexp_extract(df_event.EventParameters, '.*(\\d{4}-\\d{2}-\\d{2}T\\d{2}%3a\\d{2}%3a\\d{2}\\.\\{3}).*', 1) \
          .alias('localTime')

1 个答案:

答案 0 :(得分:2)

阻止它匹配任何东西的是这部分\.\{3}

基本上说

\. match a literal dot  
\{ match a literal open brace  
3 match a literal three  
} match a literal close brace  

我认为你的意思是\d \.\d{3}

因此,弦乐正则表达式现在是'.*(\d{4}-\d{2}-\d{2}T\d{2}%3a\d{2}%3a\d{2}\.\d{3}).*'

现在与此匹配(组1突出显示

......& eventTime = 2017-02-22T01%3a02%3a07.181 6943Z& ......

格式化(为了便于阅读)

 .* 
 (                             # (1 start)
      \d{4} - \d{2} - \d{2} 
      T 
      \d{2} %3a \d{2} %3a \d{2} 
      \. \d{3} 
 )                             # (1 end)
 .*