有没有办法从目录中的所有hdfs文件中获取第一行?

iq0todco  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(525)

我正在尝试从集群的“/user”目录中的所有hdfs文件中获取第一行。
目前,我们有一个配置单元表,其中包含有关这些文件的信息,如所有者、完整路径(位置)、所有者的公司id、文件创建日期、文件读/写权限等。我想在此配置单元表中添加一个新列,其中包含文件的完整第一行。
这就是为什么我在寻找一种方法来提取目录(在我的例子中是“/user”目录)中所有hdfs文件的第一行。我能用spark实现这个吗?

aor9mmx1

aor9mmx11#

尝试以下操作:

hadoop fs -cat /user/* | head

到处玩。
cat的工作方式与concatenate类似。
head读取作为输入提供给它的任何文本的前几行,并将它们写入标准输出(默认情况下,这是显示屏幕)

zc0qhyus

zc0qhyus2#

您可以对所有文件进行递归搜索,然后使用 cat 按照@gsamaras在另一个答案中指定的第一行

hdfs dfs -ls -R /user/ | grep -v "^d" | awk '{print $8}' | while read file; do
    echo "${file}"
    hdfs dfs -cat ${file} | head -1
    echo
done
``` `grep` 用于 `v` 标记以反转以开头的所有行 `d` i、 e.目录 `awk` 用于打印每行中的第8个字段,即文件名。

相关问题