使用JavaRdd <row>映射Spark DataFrame Colunm值

时间:2017-01-19 13:20:55

标签: java apache-spark spark-dataframe

我从Sqlcontext创建了两个DataFrame。

            DataFrame edge_dataframe = SharedSC.getEdgeDataFrame("EDGE_RDD", -1234, sc.getSparkContext());
            DataFrame vertex_dataframe = SharedSC.getVertexDataFrame("VERTEX_RDD", -1234, sc.getSparkContext());
  • vertexDataFrame

vertexColumn

三安

红薯

malith

  • edgeDataFrame

| src | DEST

sman | malith

kumara | malith

像那样。 但是为了从该data构造一个Graph.i想要将Long唯一id字段添加到verted表并使用该id更改边缘表。

首先我将唯一的长id添加到顶点表。

            JavaRDD<Row> ff = vertex_dataframe.javaRDD().zipWithIndex().map(new SerialiFunJRdd<Tuple2<Row, Long>, Row>() {
            public Row call(Tuple2<Row, Long> rowLongTuple2) throws Exception {
                return RowFactory.create(rowLongTuple2._1().getString(0), rowLongTuple2._2());
            }
        });

现在我想将我的边缘DataFrame src和dest列更改为Long ids。我可以这样做。请提前帮助。

1 个答案:

答案 0 :(得分:0)

我使用List.it做了它可能不是最好的方法。但它解决了我的问题。

首先我将“JavaRdd Row”映射到JavaRDD Tuple2

JavaRDD<Tuple2<java.lang.Long,String>> vertex_javardd = ff.map(new SerializableFunction<Row, Tuple2<java.lang.Long, String>>() {
public Tuple2<java.lang.Long, String> call(Row row) throws Exception {return new Tuple2<java.lang.Long,String(row.getLong(1),row.getString(0));}});

然后将其转换为List

List<Tuple2<Long,String>> vartexlist= vertex_javardd.collect();

现在我可以迭代List并获得所选边缘属性的映射id。