スパークデータフレームから生成された のようなイベントのリストがあります。 Spala 2.2.0をScalaで使用しています。スパークBucketizer - 要素がなくてもすべてのバケットを表示
val events = df.select($"event", hour($"time") as "hour", to_date($"time", "yyyy-MM-dd") as "day")
+-----+-----+----------+ |event|hour | day| +-----+-----+----------+ |event1| 18|2015-02-05| |event1| 17|2015-02-19| |event5| 18|2015-02-02| |event5| 19|2015-02-02| |event1| 1|2015-03-17| |event1| 0|2015-02-03| |event1| 20|2015-02-02| |event1| 22|2015-02-02| |event1| 23|2015-02-02| |event1| 18|2015-02-09| |event1| 19|2015-02-09| |event1| 21|2015-02-09| |event1| 21|2015-04-06| |event1| 23|2015-02-09| |event1| 20|2015-02-16| |event2| 19|2015-02-12| |event3| 18|2015-02-18| |event1| 22|2015-02-16| |event2| 17|2015-02-04| |event1| 23|2015-02-16| +-----+----+----------+ only showing top 20 rows
私は時給バケットを作成して、時間ごとに起こるどのように多くのイベントをカウントする必要があります。だから私のアプローチは、バケット(24個)を作成し、以下に示すように特定の時間帯にイベントを数えることでした。
val splits = (0 to 24).map(_ * 1.0).toArray
val bucketizer = new Bucketizer()
.setInputCol("hour")
.setOutputCol("bucket")
.setSplits(splits)
val bucket = bucketizer.transform(events)
val result = bucket.groupBy($"day", $"bucket").agg(count($"event").as("count")).orderBy(asc("bucket"))
result.filter($"day" === "2015-05-21").orderBy(asc("bucket")).show()
そして、上記のコードの結果が正しい
+----------+------+-----+ | day|bucket|count| +----------+------+-----+ |2015-05-21| 0.0| 1| |2015-05-21| 2.0| 1| |2015-05-21| 11.0| 1| |2015-05-21| 17.0| 1| |2015-05-21| 18.0| 4| |2015-05-21| 19.0| 4| |2015-05-21| 21.0| 1| |2015-05-21| 22.0| 3| |2015-05-21| 23.0| 1| +----------+------+-----+
です。しかし、私は出力として期待していたものを、このようなものです:
+----------+------+-----+ | day|bucket|count| +----------+------+-----+ |2015-05-21| 0.0| 1| |2015-05-21| 1.0| 0| |2015-05-21| 2.0| 1| |2015-05-21| 3.0| 0| |2015-05-21| 4.0| 0| |2015-05-21| 5.0| 0| : : |2015-05-21| 11.0| 1| |2015-05-21| 12.0| 0| |2015-05-21| 13.0| 0| : : |2015-05-21| 17.0| 1| |2015-05-21| 18.0| 4| |2015-05-21| 19.0| 4| |2015-05-21| 20.0| 0| |2015-05-21| 21.0| 1| |2015-05-21| 22.0| 3| |2015-05-21| 23.0| 1| +----------+------+-----+
は基本的には、何のイベントを持っていないビン(バケット)は0でそれを達成するためにどのように任意のアイデアを移入する必要がありますか?
ありがとうございました!
今のところ、時間列とバケット列は同じ値を含む必要があります。つまり、バケッティング手順は不要です。 – Shaido
@Shaido私はおそらく私の要求で十分ではなかったでしょう。イベントは特定の時間に発生しない可能性があります(たとえば、1〜2を超えるとイベントが発生しないなど)、私のデータフレームには1と表示された時間は含まれません。そのため、24時間すべてを強制的に作成し、 – geo