我在 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)))