我从Sqlcontext创建了两个DataFrame。
DataFrame edge_dataframe = SharedSC.getEdgeDataFrame("EDGE_RDD", -1234, sc.getSparkContext());
DataFrame vertex_dataframe = SharedSC.getVertexDataFrame("VERTEX_RDD", -1234, sc.getSparkContext());
三安
红薯
malith
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。我可以这样做。请提前帮助。
答案 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。