Я бы использовал Spark Window для решения такой проблемы.Предполагая, что есть только одна строка в день, где тип не равен нулю:
from pyspark.sql import functions as F
from pyspark.sql import Window
df = sqlContext.createDataFrame([
[(1),('2018-03-21 12:25:01'), ('a')],
[(1),('2018-03-21 12:25:02'), (None)],
[(1),('2018-03-22 12:25:03'), ('b')],
[(1),('2018-03-22 12:25:04'), (None)],
[(2),('2018-03-21 12:25:01'), ('c')],
[(2),('2018-03-21 12:25:02'), (None)],
[(2),('2018-03-21 12:25:03'), (None)],
], ['id', 'date', 'type'])
df2 = df.select('*', F.to_date('date', 'yyyy-MM-dd HH:mm:ss').alias('date2'))
windowSpec = Window.partitionBy('id', 'date2')
typee = F.max('type').over(windowSpec)
df3 = df2.select('id', 'date', typee.alias('type'))
df3.show()
>>>
+---+-------------------+----+
| id| date|type|
+---+-------------------+----+
| 2|2018-03-21 12:25:01| c|
| 2|2018-03-21 12:25:02| c|
| 2|2018-03-21 12:25:03| c|
| 1|2018-03-22 12:25:03| b|
| 1|2018-03-22 12:25:04| b|
| 1|2018-03-21 12:25:01| a|
| 1|2018-03-21 12:25:02| a|
+---+-------------------+----+