在hdfs中查询列中的行值

fkaflof6  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(275)

我在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-d。
我现在正在使用python,但是我对python和map reduce都是新手,所以我很难思考如何解决这个问题。情况已经够奇怪了,我还没有找到其他解决办法。
我在想,如果我能转动“table”,使它看起来像这样:

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

这将更容易使用,但我不确定哪种语言或技术会是最好的。你想怎么解决吗?

aiazj4mn

aiazj4mn1#

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-d
searchtable(“我爱花生”)
p-1234电话
searchtable(“你妈妈很傻”)
p-1234电话

q43xntqr

q43xntqr2#

文件.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')

相关问题