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



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

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

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

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

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

似乎有效。

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

谁能解释为什么?

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

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

它对我有用。

你应该用 lit() 来包装常量数

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

相关内容

  • 没有找到相关文章

最新更新