は、私は2つのDataFrame
を持っているとdate
、time
、mid
、binImbalance
分野に応じてそれらを結合し、リストにtimeB
とmidB
に対応する値を収集したいと思います。collect_listの使い方は?
私は次のコードで試してみました:
val d1: DataFrame
val d3: DataFrame
val d2 = d3
.withColumnRenamed("date", "dateC")
.withColumnRenamed("milliSec", "milliSecC")
.withColumnRenamed("mid", "midC")
.withColumnRenamed("time", "timeC")
.withColumnRenamed("binImbalance", "binImbalanceC")
d1.join(d2, d1("date") === d2("dateC") and
d1("time") === d2("timeC") and
d1("mid") === d2("midC")
)
.groupBy("date", "time", "mid", "binImbalance")
.agg(collect_list("timeB"),collect_list("midB"))
しかし、私はエラーが出るので、これは動作しません:: Reference 'timeB' is ambiguous, could be: timeB#16, timeB#35
を。 同時に、timeB
列の名前を変更した場合、リスト内の値を収集することはできません。
例の結果は次のようになります。
+-----+---------+------+------------+---------+------+
| date| time| mid|binImbalance| timeB| midB|
+-----+---------+------+------------+---------+------+
| 1 | 1 | 10 | 1| 4 | 10 |
| 2 | 2 | 20 | 2| 5 | 11 |
| 3 | 3 | 30 | 3| 6 | 12 |
+-----+---------+------+------------+---------+------+
| date| time| mid|binImbalance| timeB| midB|
+-----+---------+------+------------+---------+------+
| 1 | 1 | 10 | 1| 7 | 13 |
| 2 | 2 | 20 | 2| 8 | 14 |
| 3 | 3 | 30 | 3| 9 | 15 |
RESULT:
+-----+---------+------+------------+---------+-----------+
| date| time| mid|binImbalance| ListTime| ListMid |
+-----+---------+------+------------+---------+-----------+
| 1 | 1 | 10 | 1| [4,7] | [10,13] |
| 2 | 2 | 20 | 2| [5,8] | [11,14] |
| 3 | 3 | 30 | 3| [6,9] | [12,15] |
、最小完全、かつ検証例
d1 d2
id data id data
-- ---- -- ----
1 1 1 2
2 4 2 5
3 6 3 3
Result
id list
-- ----
1 [1,2]
2 [4,5]
3 [6,3]
'd1.printSchema'と' d3.printSchema'を質問に追加できますか? –