2017-02-12 4 views
0

Привет, я хотел бы отметить строку из группы записей на основе некоторых правил. У меня есть dataframe, как показано нижеКак пометить строку в группе строк в искровом информационном кадре

id price date 
a 100 2016 
a 200 2016 
a 100 2016 
b 100 2016 
b 100 2015 

Мой выход dataframe должен быть

id price date 
a 200 2016 
b 100 2016 

В данном dataframe правила основаны на двух columns.From г. группа идентификаторов (а, б), сначала одного основанный на максимальной цене, а второй на основе последней даты. Мои фактические правила более сложны и включают множество других столбцов.

Что лучше всего подходит для решения таких проблем. Нужно выбрать строку из группы строк на основе некоторых правил. Любая помощь будет оценена. Спасибо

+0

Я не уверен, что понимаю, что вы подразумеваете под «маркировкой строки». Также что-то еще, что вы пробовали до сих пор? – eliasah

+0

@eliasah «маркировка строки» означает пометку строки из группы строк. Здесь 2-я строка (id a) и первая строка (id b). Я не добился большого прогресса в этом, я попытался использовать collect_set, чтобы получить все значения и попытаться применить правила. Спасибо – John

ответ

2

Попробуйте это.

val df = Seq(("a",100,2016), ("a",200,2016), ("a",100,2016), ("b",100,2016),("b",100,2015)).toDF("id", "price", "date") 
df.show 
val df1 = df.select($"id", struct($"price", $"date").alias("data")).groupBy($"id").agg(max("data").alias("data")).select($"id", $"data.price", $"data.date") 
df1.show 

Вы получите выход, как показано ниже.

+---+-----+----+ 
| id|price|date| 
+---+-----+----+ 
| b| 100|2016| 
| a| 200|2016| 
+---+-----+----+ 
+0

Спасибо @abaghel . Мои фактические правила немного сложны, чем функция max agg. Я ищу решение, где я могу указать пользовательские правила. Пожалуйста, дайте мне знать, если у вас есть предложения. – John

+0

Другой вариант - зарегистрировать Dataframe как временную таблицу с помощью df.createOrReplaceTempView («myTable»), а затем использовать SQL-запрос в этой таблице. Вы также можете использовать UDF для обработки вашего правила/логики. – abaghel