Поиск наиболее частого значения по строке среди n столбцов в кадре данных Spark - PullRequest
0 голосов
/ 14 октября 2018

Как найти - по строке - самое частое значение среди 4 двух столбцов в кадре данных Spark (pyspark 2.2.0)?Пример df:

col1 col2 col3 col4
13   15   14   14
Null 15   15   13
Null Null Null 13
Null Null Null Null
13   13   14   14

Мой вызов:

df = df.withColumn("frq", \
        most_frequent(col("col1"),col("col2"),col("col3"),col("col4")) \
        )

, и результирующий df должен быть

col1 col2 col3 col4  df
13   15   14   14    14
Null 15   15   13    15
Null Null Null 13    13
Null Null Null Null  Null
13   13   14   14    13

Обратите внимание, что нулевые значения должны быть опущены ввычисление, даже если это наиболее частое значение в строке (если все столбцы имеют значение Null, должно быть возвращено значение Null).Связанные значения (последняя строка в df) могут возвращать любые связи.

1 Ответ

0 голосов
/ 14 октября 2018

Написать udf используя collections.Counter:

from collections import Counter
from pyspark.sql.functions import udf

@udf
def mode(*v):
  counter = Counter(x for x in v if x is not None)
  if len(counter) > 0:
    return counter.most_common(1)[0][0]
  else:
    return None

df.withColumn('mode', mode('col1', 'col2', 'col3', 'col4')).show()
+----+----+----+----+----+
|col1|col2|col3|col4|mode|
+----+----+----+----+----+
|  13|  15|  14|  14|  14|
|null|  15|  15|  13|  15|
|null|null|null|  13|  13|
|null|null|null|null|null|
|  13|  13|  14|  14|  13|
+----+----+----+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...