pig腳本不需要後綴名(python tempfile模塊生成pig腳本臨時文件,執行)

pig 腳本運行不需要後綴名

pig腳本名爲tempfile,無後綴名
用pig -f tempfile 可直接運行
另外,pig tempfile也可以直接運行

這樣就可以用python臨時文件存儲pig腳本內容直接調用

python調用pig腳本的一種方式

將pig腳本用任意文件存儲,執行時寫入python的臨時文件(tempfile模塊操作),執行結束後刪除。執行過程:
    用tempfile模塊NamedTemporaryFile生成臨時文件,名字默認隨機,然後,可以用tempfile.name直接調用該文件(無後綴名.pig),pig腳本內容存放在任意文本文件中。

這樣處理的好處是:參數傳入很方便,pig腳本內容中參數全部使用python的格式化字符串,如%s、%d,調用時讀取作爲字符串對象command,用%將實際參數拼入字符串command,這樣就避免了使用pig腳本 -p傳入大量參數的繁瑣。
壞處:多此一舉、麻煩。字符直接拼入-p後用 default獲取,也是極好的

    pig_script = tempfile.NamedTemporaryFile(delete=False)
    pig_script.write('set default_parallel %d; SET mapred.job.queue.name %s; %s %s' % (config.PIG_PARALLEL, job_queue, udf_jar_str, command_piece % args))
    pig_script.flush()

    command = '''%s -Dmapred.cache.files="%s,%s,%s,%s" -Dmapred.create.symlink=yes -Dmapred.child.java.opts=-Xmx%dm -f %s''' % \
              (config.PIG_BIN, metadata_dir, quadkey_dir, region_template_dir, ipdb_file, config.PIG_TASK_MAX_MEM, pig_script.name)

    if logger:
        logger.debug(command)

    result = exec_command(command, task_id)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章