2017-01-18 3 views
1

Я пытаюсь получить максимальное значение Алфавит из блока данных панды в целом. Меня не интересует, в какой строке или столбце она появилась. Меня интересует только одно максимальное значение в пределах кадра данных.Как найти максимальное значение Алфавит из DataFrame apache spark?

Это то, что он выглядит следующим образом:

id conditionName 
1  C 
2  b 
3  A 
4  A 
5  A 

ожидаемый результат:

|id|conditionName| 
+--+-------------+ 
| 3| A   | 
| 4| A   | 
| 5| A   | 
+----------------+ 

, потому что 'A' является первой буквой алфавита

df= df.withColumn("conditionName", col("conditionName").cast("String")) 
    .groupBy("id,conditionName").max("conditionName"); 
df.show(false); 

Exception : "conditionName" не является числовым столбцом. Функция агрегирования может применяться только к числовому столбцу;

Мне нужен максимум от всего кадра данных алфавита. Что следует использовать, чтобы добиться желаемых результатов?

Благодарим заранее!

+0

что ожидается выход ? и каково ваше определение «максимального значения от алфавита» ' – mtoto

+0

Простите, я отредактирую его, Спасибо за напомню! –

+0

все еще неясно, почему, потому что '' A ''является первой буквой алфавита или потому, что имеет наибольший счет? – mtoto

ответ

0

Вы можете отсортировать DataFrame вашей строки столбца, захватить первое значение и использовать его для фильтрации исходных данных:

from pyspark.sql.functions import lower, desc, first 

# we need lower() because ordering strings is case sensitive 
first_letter = df.orderBy((lower(df["condition"]))) \ 
       .groupBy() \ 
       .agg(first("condition").alias("condition")) \ 
       .collect()[0][0] 

df.filter(df["condition"] == first_letter).show() 
#+---+---------+ 
#| id|condition| 
#+---+---------+ 
#| 3|  A| 
#| 4|  A| 
#| 5|  A| 
#+---+---------+ 

Или более элегантно, используя Spark SQL:

df.registerTempTable("table") 
sqlContext.sql("SELECT * 
       FROM table 
       WHERE lower(condition) = (SELECT min(lower(condition)) 
              FROM table) 
       ") 
+0

Geat! , спасибо за помощь! –

Смежные вопросы