从配对中调用Pipe()并将Java对象传递到它



我有一个像 JavaPairRDD<String, Graph>这样的配对,其中 Graph是我使用

创建的Java对象
PairFunction<Row, String, Graph> pairFunction = new PairFunction<Row, String, Graph>() {
        private static final long serialVersionUID = 1L;
        public Tuple2<String, Graph> call(Row row) throws Exception {
                Integer parameter = row.getAs("foo");
                String otherParameter = row.getAs("bar");
                Graph graph = new Graph( parameter, otherParameter );
                String key = someKeyGenerator();
                return new Tuple2<String, Graph>( key, graph );
        }
};

现在,我需要使用myPairRdd.pipe('external.sh')运行外部程序,但我认为Spark将通过Stdin将Graph对象传递给external.sh

我需要在external.sh中访问Graph.parameterGraph.otherParameter

如何管理这种情况?

找到了它!!

只需要覆盖我的pojo(图)的toString()方法即可公开所需的属性!!!

在这种情况下:

@Override
public String toString() {
    return this.parameter + "," + this.otherParameter;
}

现在输出为:

(62,foo,bar)

最新更新