将Spark数据帧中的列乘以常量值

时间:2017-10-06 15:51:23

标签: python pyspark-sql

我在Spark数据帧中创建新列时遇到问题。我正在尝试使用withColumn()创建一个新列,如下所示:

.withColumn('%_diff_from_avg', 
     ((col('aggregate_sales') - col('avg_sales')) / col('avg_sales') * 100))

这会导致一些值正确计算,但我的结果表中的大多数值都为null。我不明白为什么。

有趣的是,当我从计算中删除'* 100'时,我的所有值都被正确填充 - 即没有空值。例如:

.withColumn('%_diff_from_avg', 
    ((col('aggregate_sales') - col('avg_sales')) / col('avg_sales')))

似乎有效。

因此似乎乘以100会导致问题。

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:2)

这也发生在我身上。这可能是您列的数据类型的一些问题。试试这个:

.withColumn('%_diff_from_avg', 
     ((col('aggregate_sales') - col('avg_sales')) / col('avg_sales') * 100.0))

它对我有用。