Я застрял в реализации Function1 в Java для UDF, чтобы сгладить схему Seq[Map[String,Int]]
Scala Code : UDF1 joinMap = udf { values: Seq[Map[String,Int]] => values.flatten.toMap }
spark DF
root
|-- rid: integer (nullable = true)
|-- lid: integer (nullable = true)
|-- mapArray: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: double
| | |-- value: integer (valueContainsNull = true)
Как реализовать аналогичный UDF в Java.
Java код:
UDF1 mode1 = new UDF1<WrappedArray<Map<Double, Integer>>, String>() {
@Override
public String call(WrappedArray<Map<Double, Integer>> maps) throws Exception {
List<Map<Double, Integer>> lis = (List<Map<Double, Integer>>) JavaConverters.seqAsJavaListConverter(maps).asJava();
System.out.println(lis.get(1));
java.util.Map<Double,Integer> a= lis.stream().flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return "";
}
};
error : Caused by: java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to java.util.Map
at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:269)