在HDFS中解析Json文件,并只在密钥可用时写入输出



我有一个JSON文件;name";作为密钥;url";作为另一个密钥。并不是JSON中的所有记录都具有";url";钥匙所以,当我试图写入文本时,它会被写为null。因此,我必须检查url键是否存在,如果存在,则必须将其写入2个输出文本文件。name将转到name.txt,url将转到url.txt

{ [ {"name": "a", url: "url1"}, {"name": "b"}, {"name": "C"} ] }

预期输出:

name.txt
a
url.txt
url

到目前为止我尝试了什么:

name=`hdfs dfs -cat $path | jq -r '.name'`
url=`hdfs dfs -cat $path | jq -r '.name'`
echo ${name} >> name.txt
echo ${url} >> url.txt

上面的问题是,如果找不到url,它会向输出文件写入一个null,并将等效名称写入name.txt文件。

当找不到url json标签时,如何跳过写入输出文件的记录

显然您首先需要select(.url)

同时调用hdfs和jq两次似乎有点奢侈。如果效率是一个问题,那么您可能希望将hdfs的结果保存到一个文件中,并调用jq两次,或者更好的做法是,在一个以调用awk来写入这两个文件结束的管道中,只调用hdfs和jq一次。

最新更新