将 Spark 数据框中的列乘以常数值

Multiplying a column in a Spark dataframe by a constant value

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

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

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

有趣的是,当我从计算中删除“* 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)))