2017-02-09 74 views
0

我有一個pipelinedrdd如下。每行有超過4k列,但我只展示了很少。pyspark列值處理

raw_rdd 
['2016-09-21T00:00:00-05:00 Chicago,"","",150.39999389648438cfm,false,false,0.30000001192092896inHO,68F,70.69999694824219F,.....'] 

在這裏我想申請一定改造,例如如果字段值相匹配的正則表達式"\d{4}[-]\d{2}[-]\d{2}"的日期值2016-09-21T00:00:00-05:00 Chicago那麼它應該只2016-09-21T00:00:00-05:00返回。但它正在返回原始值。

代碼

def is_date(inst): 
    if re.search("\d{4}[-]\d{2}[-]\d{2}", inst): 
     return True 

def transform(line): 
    for i in range(len(line)): 
     if is_date(str(line[i])): 
      if str(line[i]) != "": 
       line[i] = line[i].split()[0] 
    return line 

transformed_rdd = raw_rdd.map(transform) 

誰能幫我找出問題,因爲我要去的地方錯了。

+0

您沒有返回匹配,只有在匹配時才返回True並打印整個'line'。返回'group(0)'並打印。 –

回答

0

問題是我正在考慮整行作爲列值。在我做了分割(,)之後,我得到了正確的o/p