需要從 hdfs 隨機獲取乙個目錄下的內容:目錄下共3000個part,隨機挑選檔案 part 並從每個 part 中隨機獲取一些資料作為原始資料。
path為資料夾位址,total為隨機獲取的資料量
hadoop fs -text $path/* | shuf -n $total > info
自定義的核心還是 shuf -n ,不同的是可以自定義隨機檔案,每個檔案隨機幾行資料
這裡可以根據傳入的min,max規定隨機數的範圍,這裡檔案part數為3000,即可傳入 rand 0 2999
# 生成隨機數
function rand()
由於 hdfs 的檔案是 part-00001,part-01234 這樣,所以需要判斷隨機數的位數並補齊至5位
# 補全4位
function add()
if [ $len -eq 1 ];then
num=0000$num
elif [ $len -eq 2 ];then
num=000$num
elif [ $len -eq 3 ];then
num=00$num
else
num=0$num
fiecho $num
}
經過前兩步已經實現隨機選擇檔案了,接下來通過 shuf -n 即可實現隨機資料獲取,假設我要隨機選10個檔案,每個檔案選取 $total/10 行作為資料。這裡10次通過 for 迴圈控制,不是特別優雅,也可以換成 while ,抽空再來修改~ 當然也可以每個檔案不定量出隨機內容,修改也比較簡單,不多贅述。
total=1000000
per=`expr $total / 10`
# 迴圈插入
function insert()
do rnd=$(rand 0 2999)
part=$(add $rnd)
path=$input/part-$.gz
echo 第$次匯入 loading text from $path limit $per
hadoop fs -text $path | shuf -n $per >> ori_info
done
}
搞這麼複雜主要是想熟悉一下 shell 相關語法:
hadoop fs -text $path | shuf -n 10 # 隨機檢視n行
hadoop fs -text $path | tail -n 10 # 檢視後n行
hadoop fs -text $path | head -n 10 # 檢視前n行
hadoop fs -cat $path | wc -l # 檢視檔案行數
hadoop fs -du -h $path (g) / hadoop fs -count $path (byte) # 檢視檔案大小
len=$
num=`expr $num1 / $num2` # 正常四則運算
num=`echo "sclae=2; $num1/$num2" | bc` # 取小數點後幾位四則運算
num=`awk 'begin'` # awk 取小數點後幾位四則運算
> file
獲取隨機漢字
public class chinachar 隨機漢字 random rnd new random 定義乙個object陣列用來 object bytes new object strlength 每迴圈一次產生乙個含兩個元素的十六進製制位元組陣列,並將其放入bject陣列中 每個漢字有四個區位碼組...
Oracle獲取隨機記錄
最近在做乙個小的考試系統,需要用到隨機抽取題目,於是就從網上搜到如下方法 1.dbms random包 select from select from tablename order by dbms random.value where rownum n 注 dbms random包需要手工安裝,位...
GAE 隨機獲取實體
有時我們需要隨機地獲取資料記錄 實體 比如部落格程式中的 隨機文章 的實現。目前 gae 並沒有 api 可以直接獲取隨機實體,要實現這樣的需求我們只能自己想辦法了 在 stackoverflow 上也有人提過該問題,總結如下 目前 b3log solo 在處理 隨機閱讀 上採用的是方法一,即在每個...