我有DataFrame
个简单schema
:
root
|-- amount: double (nullable = true)
|-- Date: timestamp (nullable = true)
我试图查看每天和每小时的sum
金额,有些像:
+---+--------+--------+ ... +--------+
|day| 0| 1| | 23|
+---+--------+--------+ ... +--------+
|148| 306.0| 106.0| | 0.0|
|243| 1906.0| 50.0| | 1.0|
| 31| 866.0| 100.0| | 0.0|
+---+--------+--------+ ... +--------+
好吧,首先我添加了一列hour
,然后按天分组,并按小时进行调整。但是,我得到了一个例外,这可能与几个小时的销售缺失有关。这就是我想要解决的问题,但我还没有意识到。
(df.withColumn("hour", hour("date"))
.groupBy(dayofyear("date").alias("day"))
.pivot("hour")
.sum("amount").show())
例外的摘录。
AnalysisException:u'已解决的属性#3972缺少 日#5367,小时#5354,总和(金额)#5437 in operator!Aggregate [dayofyear(演员(日期#3972为日期))],[dayofyear(演员)(日期#3972 as 日期))AS日#5367,pivotfirst(小时#5354,总和(金额)#5437,0,1,2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,0,0)AS __pivot_sum(金额)AS总和(金额)#5487];'
答案 0 :(得分:2)
问题是未解决的day
列。您可以在groupBy
子句之外创建它来解决:
df = (sc
.parallelize([
(1.0, "2016-03-30 01:00:00"), (30.2, "2015-01-02 03:00:02")])
.toDF(["amount", "Date"])
.withColumn("Date", col("Date").cast("timestamp"))
.withColumn("hour", hour("date")))
with_day = df.withColumn("day", dayofyear("Date"))
with_day.groupBy("day").pivot("hour", range(0, 24)).sum("amount")
values
的{{1}}参数是可选的,但是可取的。