2016-04-05 3 views
4

Когда я пытаюсь сгруппировать свою фреймворк в столбце, попробуйте найти минимум для каждой группы groupbyDatafram.min('timestampCol'), похоже, я не могу сделать это на не числовых столбцах. Затем, как я могу правильно фильтровать минимальную (самую раннюю) дату в группе?Найти минимальную отметку по временной шкале через Spark groupBy dataframe

Я передаю данные из экземпляра postgresql S3, так что данные уже настроены.

ответ

7

Просто выполнить агрегацию напрямую, а с помощью min помощника:

import org.apache.spark.sql.functions.min 

val sqlContext: SQLContext = ??? 

import sqlContext.implicits._ 

val df = Seq((1L, "2016-04-05 15:10:00"), (1L, "2014-01-01 15:10:00")) 
    .toDF("id", "ts") 
    .withColumn("ts", $"ts".cast("timestamp")) 

df.groupBy($"id").agg(min($"ts")).show 

// +---+--------------------+ 
// | id|    min(ts)| 
// +---+--------------------+ 
// | 1|2014-01-01 15:10:...| 
// +---+--------------------+ 

В отличие от min он будет работать на любой Orderable типа.

+1

спасибо, но я получаю ошибку: не найден: значение мин. –

+2

Попробуйте: 'import org.apache.spark.sql.functions._' –

+0

Спасибо, очень быстро извините, это другой вопрос, но я получаю org.apache.spark.sql.DataFrame = [MIN (ts): timestamp], Я думал, что предположим, что добавить MIN MIN (ts) к объекту groupBy не просто вернуть единственный столбец в качестве DataFrame. мне нужно каким-то образом присоединиться к этому объекту groupBy? –