我有这些台词
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由DIS_CD_RLT_PSE和I字符串提供。
我试过这样做:
Hadoop fs -ls /hdfs/data/t11/t111/t1/t/z/InterfacePublique/ | grep DIS_CD_RLT_PSE | grep I但它并没有给出所需的结果。
发布于 2019-01-03 15:32:40
与*nix类似,-ls选项列出给定路径中的文件和目录,它不读取hdfs文件内容。见HDFS文件系统外壳文档。您可能要查找的命令是-cat
$ hdfs dfs -cat /hdfs/data/t11/t111/t1/t/z/InterfacePublique/* | grep "DIS_CD_RLT_PSE.*I"
发布于 2019-01-03 20:30:55
如果文件的大小有限,但在有大数据时不缩放,则可以使用grep。
如果使用Hive,则可以在此数据上创建一个Hive表,然后编写Hive查询以检索所需的行。
例如,上面的文件有数据,其中每一行都有5个值,由,分隔。我们可以用col1,col2,col3,col4和col5 5栏来处理表mytable。数据将表现为:
----------------------------------------------------------------
col1 | col2 | col3 | col4 | col5 |
----------------------------------------------------------------
DIS_CD_RLT_PSE | Z | NULL | 30218 | 1.7703200437278073 |
----------------------------------------------------------------在此之后,您可以编写如下查询:
Select * from mytable where col5 == '113424'您可以编写一个MapReduce作业,也可以使用另一个框架/工具(比如Pig),这样可以让您感到舒服。
希望这能有所帮助。
发布于 2019-01-03 16:30:14
如果您想对少量文件或不太大的文件执行此搜索,那么下面的方法应该有效:
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个文件进行此搜索,那么我将使用map-reduce作业或流API来完成此操作。对于大量的文件来说,上面的方法会非常慢。
https://stackoverflow.com/questions/54024371
复制相似问题