次のような DataFrame があります。
scala> data.show
+-----+---+---------+
|label| id| features|
+-----+---+---------+
| 1.0| 1|[1.0,2.0]|
| 0.0| 2|[5.0,6.0]|
| 1.0| 1|[3.0,4.0]|
| 0.0| 2|[7.0,8.0]|
+-----+---+---------+
「id」に基づいて機能を再グループ化して、次のものを取得できるようにします。
scala> data.show
+---------+---+-----------------+
| label| id| features |
+---------+---+-----------------+
| 1.0,1.0| 1|[1.0,2.0,3.0,4.0]|
| 0.0,0.0| 2|[5.0,6.0,7.8,8.0]|
+---------+---+-----------------+
これは、前述の DataFrame を生成するために使用しているコードです
val rdd = sc.parallelize(List((1.0, 1, Vectors.dense(1.0, 2.0)), (0.0, 2, Vectors.dense(5.0, 6.0)), (1.0, 1, Vectors.dense(3.0, 4.0)), (0.0, 2, Vectors.dense(7.0, 8.0))))
val data = rdd.toDF("label", "id", "features")
私は RDD と DataFrames の両方でさまざまなことを試してきました。これまでで最も「有望な」アプローチは、「id」に基づいてフィルタリングすることでした
data.filter($"id".equalTo(1))
+-----+---+---------+
|label| id| features|
+-----+---+---------+
| 1.0| 1|[1.0,2.0]|
| 1.0| 1|[3.0,4.0]|
+-----+---+---------+
しかし、現在、2 つのボトルネックがあります。
1)「id」が持つ可能性のあるすべての個別の値のフィルタリングを自動化する方法は?
以下はエラーを生成します。
data.select("id").distinct.foreach(x => data.filter($"id".equalTo(x)))
2) 特定の「ID」に関して共通の「機能」を連結する方法。私はまだ1)で立ち往生しているので、あまり試していません
どんな提案でも大歓迎です
注: 明確にするために、「id」の出現ごとに「ラベル」は常に同じです。混乱して申し訳ありませんが、私のタスクの簡単な拡張は、「ラベル」をグループ化することでもあります(更新された例)