Spark Dataframe комплексный заказ - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть набор данных журнала событий, например:

| patient | timestamp     | event_st       | extra_info |
| 1       | 1/1/2018 2:30 | urg_admission  | x          |
| 1       | 1/1/2018 3:00 | urg_discharge  | x          |
| 1       | 1/1/2018      | hosp_admission | y          |
| 1       | 1/10/2018     | hosp_discharge | y          | 

Я хочу упорядочить все строки по patient и timestamp, но, к сожалению, в зависимости от типа события event_st, timestamp может быть в минутах или днях.

Итак, решение, которое я бы использовал в C ++, было бы определить сложный оператор <, где я бы использовал event_st в качестве дискриминатора, когда гранулярность времени отличается. Например, с указанными данными события с префиксом hosp_ всегда будут упорядочены после событий с префиксом urg_, когда их день совпадает.

Существует ли какой-либо эквивалентный подход, использующий API DataFrame или другие API Spark?

Большое спасибо.

1 Ответ

0 голосов
/ 10 сентября 2018

Один из вариантов - сначала нормализовать все метки времени до некоторой стандартной формы, такой как ddMMYY или в эпоху. Самый простой способ - использовать udf.

Например: если вы считаете, что все метки времени конвертируются в эпоху, тогда ваш код будет выглядеть так:

def convertTimestamp(timeStamp:String, event_st:String) : Long = {
    if(event_st == 'urg_admission') {
    ...// Add conversion logic
    }
    if(event_st == 'hosp_admission') {
    ...// Add conversion logic
    }
     ...
}

val df = spark.read.json("/path/to/log/dataset") // I am assuming json format
spark.register.udf("convertTimestamp", convertTimestamp _)
df.createOrReplaceTempTable("logdataset")
val df_normalized = spark.sql("select logdataset.*, convertTimestamp(timestamp,event_st) as normalized_timestamp from logdataset")

После этого вы можете использовать нормализованный набор данных из последующей операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...