2017-02-09 6 views
0

У меня есть pipelinedrdd, как показано ниже. в каждой строке содержится более 4 тыс. столбцов, но я покажу только несколько.Обработка значения столбца в 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 только в том случае, если есть совпадение и распечатываете всю строку. Верните 'group (0)' и распечатайте его. –

ответ

0

Проблема заключалась в том, что я рассматривал всю строку как значение столбца. после того, как я сделал раскол (,), я получил правильный o/p

Смежные вопросы