You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark DataFrame中approxQuantile结果从列表转列的实现方案

解决Spark approxQuantile结果转指定表格格式的问题

我来帮你搞定这个转换问题!首先得搞清楚approxQuantile的返回结构:它返回的是一个嵌套列表,外层列表的每个元素对应你传入的列的分位数结果——你传了['Apple', 'Oranges'],那返回的第一个子列表就是Apple列的所有分位数,第二个就是Oranges列的。

接下来我们只需要把这些分位数和对应的百分比(比如0.1→10)一一对应,再转换成Spark DataFrame就能得到你想要的格式了。以下是完整的实现代码:

from pyspark.sql.types import StructType, StructField, IntegerType, DoubleType

# 1. 定义要计算的分位数数值(和你之前用的一致)
quantile_values = [0.1, 0.25, 0.5, 0.75, 0.9, 0.95]

# 2. 获取approxQuantile的结果
quantile_results = df.approxQuantile(['Apple', 'Oranges'], quantile_values, 0.1)

# 3. 把分位数转换成百分比(比如0.1转为10,方便显示)
percentile_list = [int(q * 100) for q in quantile_values]

# 4. 构造DataFrame的数据源:将百分比、Apple分位数、Oranges分位数一一配对
data = list(zip(percentile_list, quantile_results[0], quantile_results[1]))

# 5. 定义结果DataFrame的Schema,确保列名和数据类型符合需求
result_schema = StructType([
    StructField("Percentile", IntegerType(), nullable=False),
    StructField("Apple", DoubleType(), nullable=True),
    StructField("Oranges", DoubleType(), nullable=True)
])

# 6. 创建最终的结果DataFrame
result_df = spark.createDataFrame(data, schema=result_schema)

# 7. 展示结果,格式就和你期望的一致了
result_df.show()

补充说明:

  • 如果你的Apple/Oranges列的分位数都是整数,可以把Schema里的DoubleType()改成IntegerType(),避免显示小数末尾的.0;
  • 运行result_df.show()后,输出的表格结构就会和你给出的示例完全匹配,包含Percentile、Apple、Oranges三列,每行对应一个分位数的结果。

内容的提问来源于stack exchange,提问作者Sun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:31