2017-04-11 472 views
0

如何在做bazel構建時傳遞參數。其實我的程序會接受兩個參數,一個是目錄,另一個是target.csv 我需要獲取目錄下的文件並將其寫入csv。如何通過bazel構建時傳遞參數

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.stream.Collector; 

import org.apache.flink.api.common.functions.FlatMapFunction; 
import org.apache.flink.api.java.DataSet; 
import org.apache.flink.api.java.ExecutionEnvironment; 
import org.apache.flink.api.java.tuple.Tuple1; 
import org.apache.flink.api.java.utils.ParameterTool; 


public class ReadFiles { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws Exception { 

    // set up the execution environment 
    try { 
     final ParameterTool params = ParameterTool.fromArgs(args); 
     final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); 

     env.setParallelism(1); // without this multiple files creating 
     env.getConfig().setGlobalJobParameters(params); 

     List<String> paths = new ArrayList<String>(); 
     File dir = new File(params.getRequired("input")); 
     for (File f : dir.listFiles()) { 
     if (f.isFile()) { 
      paths.add(f.getName()); 
     } 
     } 
     DataSet<String> data = env.fromCollection(paths).rebalance(); 
     DataSet<Tuple1<String>> output = data.flatMap(new CSVSplitter()); 
     env.execute(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
// The operations are defined by specialized classes, here the Splitter class. 


class CSVSplitter implements FlatMapFunction<String, Tuple1<String>> { 

    public void flatMap(String value, Collector<Tuple1<String>> out) throws Exception { 
    out.collect(new Tuple1<String>(value)); 
    } 

} 

,並建立我正努力巴澤勒語法 -

bazel build FlinkEx/com/practice:read_files 

面臨執行此之後的問題。

Worker process sent response with exit code: 1. 
error: wrong number of type arguments; required 3 

我需要傳遞的參數像巴澤爾建立FlinkEx/COM /做法:read_files C:/ C:/target.csv

回答

3

你的意思是bazel run?您可以通過從巴澤爾調用與--把它們分開加上參數:

bazel run FlinkEx/com/practice:read_files -- c:/ c:/target.csv 

或者你也可以直接運行的二進制程序和參數傳遞「正常」:

bazel build FlinkEx/com/practice:read_files 
bazel-bin/FlinkEx/com/practice:read_files c:/ c:/target.csv 

(這是假設bazel build是把read_files in bazel-bin。如果它不在bazel-genfiles,那就從那裏運行吧。)