PySpark:列的绝对值。类型错误:需要浮点数
Posted
技术标签:
【中文标题】PySpark:列的绝对值。类型错误:需要浮点数【英文标题】:PySpark: Absolute value of a column. TypeError: a float is required 【发布时间】:2017-05-18 12:27:58 【问题描述】:我有一个数据框df
创建如下,
schema = StructType([StructField('Id', StringType(), False),
StructField('Value', FloatType(), False)])
df = spark.createDataFrame([('a',5.0),('b',1.0),('c',-0.3)],schema)
看起来像
+---+-----+
| Id|Value|
+---+-----+
| a| 5.0|
| b| 1.0|
| c| -0.3|
+---+-----+
现在我想取Value
的绝对值,它应该返回
+---+-----+
| Id|Value|
+---+-----+
| a| 5.0|
| b| 1.0|
| c| 0.3|
+---+-----+
我试过了
df = df.withColumn('Value',math.fabs(df.Value))
但它抱怨TypeError: a float is required.
但是值列是用FloatType()
指定的。
关于如何正确执行此操作的任何线索?谢谢!
【问题讨论】:
【参考方案1】:可以使用原生的Spark
函数abs()
:
from pyspark.sql.functions import abs
df1 = df.withColumn('Value',abs(df.Value))
df1.show()
+---+-----+
| Id|Value|
+---+-----+
| a| 5.0|
| b| 1.0|
| c| 0.3|
+---+-----+
【讨论】:
太棒了。我以前试过这个,但没有导入 abs,得到一个 TypeError: 'Column' object is not callable,这对我来说有点误导。谢谢! 我认为有更好的方法来导入abs
,而不影响python原生abs
。更好的方法:... import abs as abs_
或 from pyspark.sql import functions as F
然后F.abs()
。以上是关于PySpark:列的绝对值。类型错误:需要浮点数的主要内容,如果未能解决你的问题,请参考以下文章
不能在 QTableWidget 中添加两列。错误 - DeprecationWarning:需要一个整数(获取类型浮点数)