GROUPBYを適用した後に変更された列の値を取得するには?

ヤニMOTHER:

私は後のため、重複の我々は複数のレコードを持って結合条件をJavaを使用して火花コード、に取り組んでいますIDsさまざまなソースで、(ID重複しているが、いくつかの属性が変更された)ので、同じIDを持つ我々は、複数のrecords.what Iの必要性を持っているどの組み合わせることですそれぞれのための単一のユニークな行のにレコードを複製ID

入力データセット

+---+---+---+----+---+---+
|id |b  |c  |d   |f  |g  |
+---+---+---+----+---+---+
|1  |e  |dd |ddd |34 |r5t|
|1  |e  |dd2|ddd |34 |r5t|
|1  |e  |dd3|ddd |34 |rt |
|2  |e  |dd |ddd1|34 |5rt|
|4  |e  |dd |ddd1|34 |rt |
|1  |e  |dd4|ddd |34 |rt |
|4  |e  |dd4|ddd |34 |rt |
|4  |e  |dd4|ddd |3  |rt |
|2  |e  |dd |ddd |3  |r5t|
|2  |e  |dd |ddd |334|rt |
+---+---+---+----+---+---+

予想される出力

+---+--------------+--------------+--------------+-------------------+--------------+
|id |f             |            b |             g|d                  |d             |
+---+--------------+--------------+--------------+-------------------+--------------+
|1  |[34]          |[e]           |[r5t, rt]     |[dd4, dd3, dd2, dd]|[ddd]         |
+---+--------------+--------------+--------------+-------------------+--------------+


私は明示的に与えてみましたcollect_list、以下のように

df.groupBy("id").agg(


                 functions.collect_set("f"),
                 functions.collect_set("b")

                ).show(1,false);

しかし、私の場合は、我々はあまりにも列がいくつかの時間を変え、同じではないかもしれないデータセットで、300個の列を持っています。

Yashwanth Kambala:

スパークにorg.apache.spark.sqlパッケージがあるagg(exprs: Map[String, String])受け入れる方法Map<String,String>ここkeyカラムと値の名前ではsql.functionsあります。

Dataset<Row> df = spark.read().format("csv").option("header", "true")
                .load("...");

Map<String,String> collect_MAP =  Arrays.stream(df.columns())
            .filter(f -> !f.equals("id"))
            .collect(Collectors.toMap(f -> f,f -> "collect_set"));


     df.groupBy("id").agg(collect_MAP).show(false);


結果

+---+--------------+--------------+--------------+-------------------+--------------+
|id |collect_set(f)|collect_set(b)|collect_set(g)|collect_set(c)     |collect_set(d)|
+---+--------------+--------------+--------------+-------------------+--------------+
|1  |[34]          |[e]           |[r5t, rt]     |[dd4, dd3, dd2, dd]|[ddd]         |
|4  |[3, 34]       |[e]           |[rt]          |[dd4, dd]          |[ddd1, ddd]   |
|2  |[334, 3, 34]  |[e]           |[r5t, rt, 5rt]|[dd]               |[ddd1, ddd]   |
+---+--------------+--------------+--------------+-------------------+--------------+


おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=314705&siteId=1