有没有办法从目录中的所有 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
grep
与 v
标志一起使用以反转所有以 d
开头的行,即目录
awk
用于打印每行第8个字段,即文件名。
我正在尝试从集群的“/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
grep
与 v
标志一起使用以反转所有以 d
开头的行,即目录
awk
用于打印每行第8个字段,即文件名。