如何在包含特殊字符串的hdfs文件中显示特定行

9jyewag0  于 2021-05-31  发布在  Hadoop
关注(0)|答案(3)|浏览(519)

我有这些台词

DIS_CD_RLT_PSE,D,,177959,10.425719262087393
DIS_CD_RLT_PSE,E,,811061,47.5159687929684
DIS_CD_RLT_PSE,I,,113424,6.6449394612410755
DIS_CD_RLT_PSE,M,,404023,23.66966758313058
DIS_CD_RLT_PSE,P,,28083,1.6452411737377726
DIS_CD_RLT_PSE,U,,142155,8.32814368310697
DIS_CD_RLT_PSE,Z,,30218,1.7703200437278073

都在这里

/hdfs/data/t11/t111/t1/t/z/InterfacePublique/

我需要一个只能显示以下行的hadoop命令:

DIS_CD_RLT_PSE,I,,113424,6.6449394612410755

由disu cd rlt pse和i string给出。
我试着这样:

Hadoop fs -ls /hdfs/data/t11/t111/t1/t/z/InterfacePublique/ | grep DIS_CD_RLT_PSE | grep I

但它没有给出所需的结果。

igetnqfo

igetnqfo1#

类似于*nix -ls 选项列出给定路径中的文件和目录,它不读取hdfs文件内容。请参阅hdfs文件系统shell文档。你要找的命令可能是 -cat : $ hdfs dfs -cat /hdfs/data/t11/t111/t1/t/z/InterfacePublique/* | grep "DIS_CD_RLT_PSE.*I"

py49o6xq

py49o6xq2#

如果文件的大小有限,但在有大数据时无法扩展,则可以使用grep。
如果使用配置单元,则可以在此数据上创建配置单元表,然后编写配置单元查询以检索所需的行。
例如,上面的文件有数据,其中每行有5个值,用 , . 我们可以治疗我们有5列- col1 , col2 , col3 , col4 以及 col5 表的 mytable . 数据将表示为:

----------------------------------------------------------------
col1           | col2 | col3 |    col4   | col5                |    
----------------------------------------------------------------
DIS_CD_RLT_PSE  | Z   | NULL |   30218   | 1.7703200437278073  |
----------------------------------------------------------------

之后,您可以编写如下查询:

Select * from mytable where col5 == '113424'

你可以写一个mapreduce作业或者使用另一个你喜欢的框架/工具(比如pig)。
希望这有帮助。

j2datikz

j2datikz3#

如果您想对少量文件或不是很大的文件执行此搜索,则以下方法应适用:

hadoop fs -ls /technology/dps/real | awk '{print $8}' | while read f; do hdfs dfs -cat $f | grep -q DIS_CD_RLT_PSE && echo $f; done

然而,如果你在100个文件上做这个搜索,那么我会使用MapReduceJob或流api来做这个。对于大量文件,上述方法将非常慢。

相关问题