python - 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' 的不支持的操作数类型
所以小数类型出了点问题。解决问题的方法是什么,或者如何将值转换为可接受的数据类型?
解决方案
您可以使用地图转换为浮动:
df.select('a').rdd.flatMap(lambda x: x).map(float).histogram(10)
推荐阅读
- python - 如何在熊猫中选择一个级别和所有子级别(和项目)?
- ios - 如何为 Data swift 添加扩展?
- java - 如何在边框底部的每个角落放置两个按钮
- xaml - 如何使用带有 Xamarin Forms 的列表视图单元格的选定项目上的带有单选按钮的 Checked 绑定?
- matlab - 左矩阵除以向量
- angularjs - 如何使用量角器测试是否显示 AngularJS md-tooltip
- ruby - Ruby popen3 - 如何防止重复写入标准输入导致超时?
- office-js - Microsoft Teams 中未显示管理员管理的 Office Web 插件
- php - 事务在 CodeIgniter 中无法正常工作
- php - 通过 PHPMailer 发送 SMTP 电子邮件突然开始失败