从PairRDD调用pipe()并将Java Object传递给它

时间:2017-09-12 03:21:26

标签: java apache-spark

我有一个像JavaPairRDD<String, Graph>这样的PairRDD,其中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

我需要访问Graph.parameter内的Graph.otherParameterexternal.sh

如何管理这种情况?

1 个答案:

答案 0 :(得分:0)

发现它!!

只需覆盖我的POJO(图表)的toString()方法即可显示所需的属性!!!

在这种情况下:

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

现在输出是:

(62,foo,bar)