Построить RDD[Edge[ED]] из RDD[Long, Long, ED] в GraphX

Я сейчас пытаюсь построить RDD[Edge[String]] от RDD[(Long,Long,String)]Я видел код src Edgeимеет параметр Edge(VertexId,VertexId,ED)Так что я думаю, если у меня есть RDD[(Long,Long,String)] Я могу превратить его в RDD[Edge[String]]

Мой код

val c:RDD[(String, String)] = something
val s:RDD[(String, String)] = something
val edgeRDD: RDD[Edge[String]] = c
        .join(s).map({
            case (num: String, (src: String, dst: String)) 
                => (src.toLong, dst.toLong, expRelation)
        }
    ) 

Но наконец я получил type mismatch ошибка

[error]  found   : (Long, Long, String)
[error]  required: org.apache.spark.graphx.Edge[String]
[error]                     => (src.toLong, dst.toLong, expRelation)
[error]                        ^

Поэтому мне интересно, есть ли способ построить RDD[Edge[ED]] прямо из RDD[(Long,Long,ED)]

1 ответ

Решение

Ваша функция не возвращает Edge[String]. Изменить тип возврата на

Edge(src.toLong, dst.toLong, expRelation)

Код:

val c:RDD[(String, String)] = something
val s:RDD[(String, String)] = something
val edgeRDD: RDD[Edge[String]] = c
        .join(s).map({
            case (num: String, (src: String, dst: String)) 
                => Edge(src.toLong, dst.toLong, expRelation)
        }
    ) 
Другие вопросы по тегам