从sparkDataframe构造java hashmap

bybem2ql  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(451)

我在我的项目中使用spark-sql-2.4.1v和java8。
我需要从给定的Dataframe构建一个循环hashmap,如下所示:

List ll = Arrays.asList(
      ("aaaa", 11),
      ("aaa", 12),
      ("aa", 13),
      ("a", 14)
    )

Dataset<Row> codeValudeDf = ll.toDF( "code", "value")

鉴于上述Dataframe,我需要创建一个hashmap

Map<String, String> lookUpHm = new Hashmap<>();

lookUpHm  => aaaa->11  , aaa->12 , aa->13, a->14

如何在java中实现?

dkqlctbz

dkqlctbz1#

使用withcolumn简单地添加一个map类型的新列,并在Dataframe上进行收集。

codeValudeDf.withColumn("some_map",
map(col("code"), col("value"))).select("some_map").distinct().collect()
qq24tv8q

qq24tv8q2#

试试这个-

List<Row> rows = Arrays.asList(
                RowFactory.create("aaaa", 11),
                RowFactory.create("aaa", 12),
                RowFactory.create("aa", 13),
                RowFactory.create("a", 14)
        );

        Dataset<Row> codeValudeDf = spark.createDataFrame(rows, new StructType()
                .add("code", DataTypes.StringType, true, Metadata.empty())
                .add("value", DataTypes.IntegerType, true, Metadata.empty()));
        Map<String, Integer> map = new HashMap<>();
        codeValudeDf.collectAsList().forEach(row -> map.put(row.getString(0), row.getInt(1)));

        System.out.println(map.entrySet().stream().map(e -> e.getKey() +"->"+ e.getValue())
                .collect(Collectors.joining(", ", "[ ", " ]")));
        // [ aaa->12, aa->13, a->14, aaaa->11 ]

相关问题