Как ввести значение на дневном уровне в датафрейм вместо нуля - PullRequest
0 голосов
/ 27 августа 2018

У меня есть фрейм данных pyspark, который содержит столбцы, как показано

Unique_id        date                type

1          2018-03-21 12:05:31        a
1          2018-03-21 12:05:32        None
1          2018-03-21 12:05:33        None
1          2018-03-21 12:05:34        None
1          2018-03-21 12:05:35        None
1          2018-03-21 12:05:36        None
1          2018-03-21 12:05:37        None
2          2018-03-21 12:05:31        b
2          2018-03-21 12:05:32        None
2          2018-03-21 12:05:33        None
2          2018-03-21 12:05:34        None

Теперь тип может меняться через определенные дни, но не в тот же день.То, чего я пытаюсь достичь и не могу понять, как это сделать, это взять значение, полученное один раз в день, а затем заполнить все значения, полученные за этот день, этим значением.Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

После изучения приведенного выше ответа и моих собственных проб и ошибок я нашел подходящее решение с помощью форвард-заполнения специально для моей проблемы.

0 голосов
/ 27 августа 2018

Я бы использовал 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|
+---+-------------------+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...