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

时间:2017-10-04 18:36:18

标签: hadoop apache-spark filesystems hdfs distributed-computing

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

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

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

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

hadoop fs -cat /user/* | head

并且玩耍。

cat就像/是连接一样。

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

答案 1 :(得分:0)

您可以对所有文件进行递归搜索,然后使用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

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

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