스파크 데이터 프레임에서 생성 된 과 같은 이벤트 목록이 있습니다. 나는 스칼라와 함께 Spark 2.2.0을 사용하고있다. Spark Bucketizer - 요소가 없어도 모든 버킷을 표시합니다.
+-----+-----+----------+ |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
val events = df.select($"event", hour($"time") as "hour", to_date($"time", "yyyy-MM-dd") as "day")
나는 시간마다 버킷을 생성하고 모든 시간을 일이 얼마나 많은 이벤트를 계산해야합니다. 그래서 내 접근 방식은 버킷 (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