Используя этот код, чтобы найти модальный:Объединение нескольких функций GroupBy в 1
import numpy as np
np.random.seed(1)
df2 = sc.parallelize([
(int(x),) for x in np.random.randint(50, size=10000)
]).toDF(["x"])
cnts = df2.groupBy("x").count()
mode = cnts.join(
cnts.agg(max("count").alias("max_")), col("count") == col("max_")
).limit(1).select("x")
mode.first()[0]
из Calculate the mode of a PySpark DataFrame column?
возвращается ошибка:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-53-2a9274e248ac> in <module>()
8 cnts = df.groupBy("x").count()
9 mode = cnts.join(
---> 10 cnts.agg(max("count").alias("max_")), col("count") == col("max_")
11).limit(1).select("x")
12 mode.first()[0]
AttributeError: 'str' object has no attribute 'alias'
Вместо этого решения я пытаюсь этот обычай один :
df.show()
cnts = df.groupBy("c1").count()
print cnts.rdd.map(tuple).sortBy(lambda a: a[1], ascending=False).first()
cnts = df.groupBy("c2").count()
print cnts.rdd.map(tuple).sortBy(lambda a: a[1] , ascending=False).first()
которая возвращает:
Так модальный c1
& c2
являются 2,0 и 3,0 соответственно
Может ли это быть применено ко всем столбцам c1,c2,c3,c4,c5
в dataframe вместо явного выбора каждого столбца, как я сделал?