2015-09-16 2 views
1

У меня есть текстовый файл с разделителями табуляции в hdfs, который выводится из некоторой текстовой аналитики, созданной кем-то, которая выглядит так. Реальный файл имеет ширину 18 тыс. Столбцов, а когда он обновляется ежемесячно, количество столбцов не является статическим, ни имена столбцов.Запросить столбец для значений строк в HDFS

Product ID [I love peanuts] [Your mom is silly] [Let's eat pizza] 
P-ABCD    0      0      1 
P-1234    1      1      0 

Мне нужно написать программу, которая будет искать или запрос для «Едим пиццу» и вернуть P-ABCD.

Я использую Python в данный момент, но я новичок и в python, и в карте, поэтому у меня возникают проблемы с тем, как решить эту проблему. Ситуация довольно странная, я не нашел ничего другого с решением.

Я думаю, если бы я мог повернуть «стол», так что это выглядело так:

ProductID Phrase 
P-ABCD  [Let's eat pizza] 

Это было бы легче работать, но я не уверен, какой язык или технология будет быть лучше. Любые мысли о том, как вы его решаете?

ответ

1

file.txt

Product ID I love peanuts Your mom is silly Let's eat pizza 
P-ABCD 0 0 1 
P-1234 1 1 0 

код

import csv 

def search(search_column, search_value): 

    with open('file.txt', 'rb') as f: 
     header = [] 
     reader = csv.reader(f, delimiter='\t', quotechar='"') 
     for row in reader: 
      if not row: 
       continue 
      if not header: 
       header = row 
       continue 
      row = dict(zip(header, row)) 
      if row.get(search_column) == search_value: 
       return row.get('Product ID') 
     return None 

print search('Let\'s eat pizza', '1') 
0
def searchTable(look_for): 

    import shlex 
    import re 

    l_rows = [] 

    with open("1_table_data") as f: 

     for line in f: 
      line = line.replace("Product ID", "Product_ID") 
      line = shlex.split(re.sub('[\[\]]','\"', line)) 
      l_rows.append(line) 


    index_of_look_for = l_rows[0].index(look_for) 

    for i in range(1, len(l_rows)): 
     if int(l_rows[i][index_of_look_for]) == 1: 
      print(l_rows[i][0]) 

searchTable ("Едим пиццу")

P-ABCD

searchTable ("Я люблю орешки ")

P-1234

searchTable ("Твоя мама глупая")

P-1234

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