首页 > 解决方案 > PySpark 为 DecimalType 列创建直方图数据框

问题描述

如何为具有以下架构的单列 DataFrame 创建均匀分布的 bin 计数:

>>> df.schema
StructType(List(StructField(a,DecimalType(38,0),true)))

将数据框创建为 MWE:

from pyspark.sql import Row
from pyspark.sql.types import StructType, StructField, DecimalType
from decimal import Decimal

schema = StructType([StructField('a', DecimalType(38,0), True)])

df = spark.createDataFrame(
    spark.sparkContext.parallelize([Row(a=Decimal(x)) for x in range(100)]),
    schema
)

现在这是一个经常被接受的答案

df.select('a').rdd.flatMap(lambda x: x).histogram(10)

但它给出了一个类型错误:

TypeError: *: 'decimal.Decimal' 和 'float' 的不支持的操作数类型

所以小数类型出了点问题。解决问题的方法是什么,或者如何将值转换为可接受的数据类型?

标签: pythonapache-sparkpysparkrdd

解决方案


您可以使用地图转换为浮动:

df.select('a').rdd.flatMap(lambda x: x).map(float).histogram(10)

推荐阅读