如何计算DataFrame各列众数、存入列表并转换为新DataFrame
嘿,搞定这个众数列表转Spark DataFrame其实很简单,给你两种实用的方法,选你顺手的来:
方法1:直接用createDataFrame快速构造
这种方法最直接,我们可以把众数列表和原DataFrame的列名对应起来,生成单行的DataFrame:
# 假设你已经初始化了SparkSession(通常命名为spark) # 方式一:用字典映射列名和众数,自动匹配列顺序 mode_df = spark.createDataFrame([dict(zip(df_num.columns, mode_val))]) # 方式二:指定原DataFrame的schema,保证数据类型完全一致 # 这种方式更稳妥,尤其当原表有多种数据类型(比如数值、字符串)时 mode_df = spark.createDataFrame([mode_val], schema=df_num.schema)
方法2:用Row对象明确构造行数据
如果你想更清晰地对应列和值,可以用Row对象来构造:
from pyspark.sql import Row # 创建对应原列名的Row模板 ModeRow = Row(*df_num.columns) # 把众数列表传入生成行对象 mode_row = ModeRow(*mode_val) # 转换为DataFrame mode_df = spark.createDataFrame([mode_row])
验证结果
生成后可以用show()查看最终的DataFrame:
mode_df.show()
这样就能得到一个以原DataFrame列名为表头,各列众数为单行数据的新DataFrame啦,其中None会自动被识别为Spark的null值,完全适配你的需求。
内容的提问来源于stack exchange,提问作者kcvizer




