我在hdfs中有一个制表符分隔的文本文件,该文件是从其他人构建的文本分析中输出的,看起来像这样。真正的文件是18k列宽,当每月刷新时,列数不是静态的,列名也不是。
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和map reduce都不熟悉,所以我无法解决如何解决这个问题。情况很奇怪,我还没有找到解决方案。
我在想是否可以转动"表",以便它看起来像这样:
ProductID Phrase
P-ABCD [Let's eat pizza]
这会更容易使用,但我不确定哪种语言或技术最好。关于你如何解决它的任何想法?
答案 0 :(得分: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')
答案 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