Я получаю экземпляр JavaRDD<Row>
(ROW
из здесь ), который я хочу преобразовать в JavaPairRDD<String,Map>
, потому что впоследствии я хочу присоединить его к другому rdd. ( Встроенный несколько не по теме вопрос : будет ли он работать? В частности, будет ли Map
в качестве параметра второго типа JavaPairRDD
привести к правильному объединению пар ключ-значение?)
Когда я делаю:
System.out.println(rdd.collect());
Распечатывается в следующем формате:
[[{key1=val11,key2=val12,key3=val13,...}],[{key1=val21,key2=val22,key3=val23,...}],...,[{key1=val31,key2=val32,key3=val33,...}]]
Обратите внимание, что формат [[{}],[{}],...[{}]]
. Это потому, что rdd
содержит список Row
с, где каждый Row
содержит UnfodifiableMap
(как объяснено ниже).
Я хочу, чтобы значение key7
было ключом в JavaPairRDD
. То есть я хочу, чтобы последующая форма была конечной формой вывода:
{val17={key1=val11,key2=val12,key3=val13,...}, val27={key1=val21,key2=val22,key3=val23,...},..., val37={key1=val31,key2=val32,key3=val33,...}}
Я начал с наблюдения содержимого rdd
в узле отладки внутри макета foreach
:
![enter image description here](https://i.stack.imgur.com/eUION.png)
Наблюдение различных значений в режиме отладки:
JavaRDD
содержит GenericRowWithSchema
:
![enter image description here](https://i.stack.imgur.com/VShHO.png)
f.get(0)
возвращает карту:
![enter image description here](https://i.stack.imgur.com/6BnAP.png)
Я не могу получить доступ к чему-либо из карты выше:
Его (f.get(0)
) на самом деле UnmodifiableMap
:
![enter image description here](https://i.stack.imgur.com/KeCgC.png)
Я немного удивлен, что GenericRowWithSchema
и UnmodifiableMap
. Я продолжил, набрав JavaPairRDD
следующим образом:
JavaPairRDD<String, Map> pairrdd = neo4jrdd.flatMapToPair(f -> {
return new Tuple2<String, Map>(f.getString(7),(Map)f.get(0));
});
Но это дает мне:
Type mismatch: cannot convert from JavaPairRDD<Object,Object> to JavaPairRDD<String,Map>
Я не могу догадаться, как я могу получить JavaPairRDD
от JavaRDD<Row>
. Где я иду не так с выше?