【发布时间】:2026-02-05 01:30:01
【问题描述】:
我有一个 spark 数据框,其中 3 列存储 3 个不同的预测。我想知道每个输出值的计数,以便选择获得最大次数的值作为最终输出。
我可以在 pandas 中轻松地做到这一点,方法是为每一行调用我的 lambda 函数来获取 value_counts,如下所示。我已经在这里将我的 spark df 转换为 pandas df,但是我需要能够直接对 spark df 执行类似的操作。
r=[Row(run_1=1, run_2=2, run_3=1, name='test run', id=1)]
df1=spark.createDataFrame(r)
df1.show()
df2=df1.toPandas()
r=df2.iloc[0]
val_counts=r[['run_1','run_2','run_3']].value_counts()
print(val_counts)
top_val=val_counts.index[0]
top_val_cnt=val_counts.values[0]
print('Majority output = %s, occured %s out of 3 times'%(top_val,top_val_cnt))
输出告诉我值 1 出现的次数最多——在这种情况下是两次——
+---+--------+-----+-----+-----+
| id| name|run_1|run_2|run_3|
+---+--------+-----+-----+-----+
| 1|test run| 1| 2| 1|
+---+--------+-----+-----+-----+
1 2
2 1
Name: 0, dtype: int64
Majority output = 1, occured 2 out of 3 times
我正在尝试编写一个 udf 函数,它可以获取每个 df1 行并获取 top_val 和 top_val_cnt。有没有办法使用 spark df 实现这一点?
【问题讨论】:
标签: dataframe apache-spark pyspark