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

Is there a way to get the first line from all HDFS files in a directory?

我正在尝试从集群的“/user”目录中的所有 HDFS 文件中获取第一行。

目前我们有一个 Hive table,其中包含有关这些文件的信息,例如所有者、完整路径(位置)、所有者的公司 ID、文件创建日期、文件 read/write 权限等。我想向此 Hive table 添加一个新列,其中包含文件的完整第一行。

这就是为什么我正在寻找一种方法来提取目录(在我的例子中是“/user”目录)中所有 HDFS 文件的第一行。我可以使用 Spark 实现吗?

尝试这样的事情:

hadoop fs -cat /user/* | head

玩玩。

cat 用于 like/is 连接。

head 读取作为输入给它的任何文本的前几行,并将它们写入标准输出(默认情况下是显示屏)

您可以对所有文件进行递归搜索,然后使用 cat 并按照@gsamaras

的其他答案中指定的第一行
hdfs dfs -ls -R /user/ | grep -v "^d" | awk '{print }' | while read file; do
    echo "${file}"
    hdfs dfs -cat ${file} | head -1
    echo
done

grepv 标志一起使用以反转所有以 d 开头的行,即目录

awk用于打印每行第8个字段,即文件名。