2016-10-02 3 views
1

私は、次のような単純なschemaDataFrameは持っている:ピボット

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| 
+---+--------+--------+ ... +--------+ 

、最初のIカラムhourを加えた後、私は日ごとにグループ化され、そして時間によって回動。しかし、私は、おそらくいくつかの時間のために不足しているの販売に関連している例外を得ました。これは私が修正しようとしているものですが、私はどのように実現していません。

(df.withColumn("hour", hour("date")) 
    .groupBy(dayofyear("date").alias("day")) 
    .pivot("hour") 
    .sum("amount").show()) 

例外の抜粋。

AnalysisException:オペレータでu'resolved属性(複数可) 日#5367から欠落している日付#3972、時間の#5354、合計(金額)#5437集計 [DAYOFYEAR(キャスト(日#3972日など! ))]、[DAYOFYEAR(CAST( 日付として日付#3972))日#5367 AS、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)__pivot_sum(量)との和(量)#AS 5487]; '

答えて

2

問題が解決されていませんdayの列です。あなたはそれに対処するために外groupBy句を、それを作成することができます:pivotため

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引数はオプションですが、お勧めです。