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