我得到JavaRDD<Row>
(ROW
来自here)的实例,我希望将其转换为JavaPairRDD<String,Map>
,因为之后我想与其他rdd一起加入。{ (内联有点偏离主题问题:它会起作用吗?具体来说,将Map
作为JavaPairRDD
的第二个类型参数会导致正确合并键值对吗?)< / p>
当我这样做时:
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
的内容:
在调试模式下观察不同的值:
我对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>
。我上面哪里出错?
答案 0 :(得分:0)
能够如下进行:
JavaPairRDD<String, Map> pairRdd = rdd.mapToPair(f -> {
return new Tuple2<String, Map>(((Map)f.get(0)).get("id").toString(), ((Map)f.get(0)));
});
上面的 f.get(0).get("id")
对应f.getString(7)
,这就是我误解了如何在Row
中访问单元格值。事实上,我仍然没有完全得到它。我应该使用getString()
flatMapToPair()
个州mapToPair()
,但它无效。有人可以解释原因吗?
此外,不需要---
- hosts: localhost
gather_facts: yes
tasks:
- debug: var=ansible_facts.hostname
- debug: var=ansible_hostname
。我可以使用("love", "i", "money")
。