2016-11-04 7 views
0

ich eine DataFrame mit unten DatenSpark-Datenrahmen hinzufügen Spalte mit Wert

scala> nonFinalExpDF.show 
+---+----------+ 
| ID|  DATE| 
+---+----------+ 
| 1|  null| 
| 2|2016-10-25| 
| 2|2016-10-26| 
| 2|2016-09-28| 
| 3|2016-11-10| 
| 3|2016-10-12| 
+---+----------+ 

Von diesem DataFrame ich unter DataFrame

+---+----------+----------+ 
| ID|  DATE| INDICATOR| 
+---+----------+----------+ 
| 1|  null|   1| 
| 2|2016-10-25|   0| 
| 2|2016-10-26|   1| 
| 2|2016-09-28|   0| 
| 3|2016-11-10|   1| 
| 3|2016-10-12|   0| 
+---+----------+----------+ 

Logic erhalten möchten -

  1. Neueste DATE (MAX-Datum) einer ID, Indikatorwert wäre 1 und andere a re 0.
  2. Für Nullwert des Kontos Indikator würde 1 sein

Bitte machen Sie mir eine einfache Logik zu tun.

+2

Post-Code, was Sie bisher versucht? – Shankar

Antwort

2

Versuchen

df.createOrReplaceTempView("df") 
spark.sql(""" 
    SELECT id, date, 
    CAST(LEAD(COALESCE(date, TO_DATE('1900-01-01')), 1) 
    OVER (PARTITION BY id ORDER BY date) IS NULL AS INT) 
    FROM df""") 
+0

Es funktioniert. Ich habe "RegisterTempTable" anstelle von createOrReplaceTempView verwendet. – Avijit

Verwandte Themen