使用文件名的一部分作为字段/列添加

kpbpu008  于 2021-06-30  发布在  Hadoop
关注(0)|答案(2)|浏览(408)

我每天得到5个文件(通过wget)保存到/tmp中,用bash脚本加载到hdfs中。
唐纳德鸭-2013-07-20.zip
米老鼠-2013-07-20.zip
goofygoof-2013-07-20.zip文件
冥星-2013-07-20.zip
大灰狼-2013-07-20.zip
文件名的日期部分是动态的。
然后我该如何告诉hadoop加载5个文件中的每一个?我听说了一个循环。

for file in /tmp/*; do
echo "Running ${file##*/} ...."
done

我要用“hadoop fs-put…”语句替换回显行吗?会是什么样子?

2lpgd968

2lpgd9681#

下面是我要做的:

hdfsdir=/path/to/hdfs/output/dir
datethru=`date "+%Y-%m-%d" --date="3 days ago"` # replace by how many days ago you want
for i in `ls /tmp/*-$datethru.zip`; do
    hadoop fs -put $i $hdfsdir
done

这实际上会获取目录中包含特定日期并以.zip结尾的所有文件,并将这些文件中的每个文件上载到hdfs中的特定目录。

bjp0bcyl

bjp0bcyl2#

你可以这样做:


# !/bin/bash

when=$(date "+%Y-%m-%d") #output like 2013-07-23
names=(donaldDuck mickeyMouse goofyGoof plutoStar bigBadWolf)

for file in "${names[@]}"
do
        ls -l $file-$when.zip #output like donaldDuck-2013-07-23.zip
done

解释

这些名称存储在一个数组中 $names . 因此,我们可以用 for file in "${names[@]}" . 同时,我们将日期存储在 $when ,以便与格式匹配 $file-$when.zip .

相关问题