有没有一种方法可以优化此查询,使其不多次使用withColumn。我最大的问题是我遇到了这个问题:https://issues.apache.org/jira/browse/SPARK-18532
查询是这样的。我有一个带有10个布尔列的数据框。 我有一些修饰符,例如:
val smallIncrease = 5
val smallDecrease = -5
val bigIncrease = 10
val bigDecrease = -10
基于每个布尔列,我想通过基于不同列中的值添加小/大增加/减少来计算最终分数。 所以现在我的查询看起来像这样:
df.withColumn("result", when(col("col1"), col("result") + lit(smallIncrease)).otherwise(col("result") + lit(smallDecrease)))
.withColumn("result", when(col("col2"), col("result") + lit(bigIncrease)).otherwise(col("result") + lit(bigDecrease)))
.withColumn("result", when(col("col3"), col("result") + lit(smallIncrease)).otherwise(col("result") + lit(smallDecrease)))
.withColumn("result", when(col("col4"), col("result") + lit(smallIncrease)).otherwise(col("result") + lit(smallDecrease)))
.withColumn("result", when(col("col5"), col("result") + lit(smallIncrease)).otherwise(col("result") + lit(bigDecrease)))
.withColumn("result", when(col("col6"), col("result") + lit(bigIncrease)).otherwise(col("result") + lit(smallDecrease)))
.withColumn("result", when(col("col7"), col("result") + lit(smallIncrease)).otherwise(col("result") + lit(smallDecrease)))
有没有一种方法可以压缩此查询并避免多个withColumns。 Unfortunaltey UDF不建议使用,因为要考虑的布尔列超过10个,并且UDF限制为10列。也许我可以将其拆分为2个UDF,但这对我来说看起来很丑...
答案 0 :(得分:0)
这样的事情怎么样?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char dayofweek[] = "Friday";
int day = 13;
char month[] = "May";
int year = 1927;
char *string; //I want to save my date into this string
const size_t memory;
//trying to allocate memory
memory = malloc(strlen(dayofweek)+strlen(month)+intlen(day)+intlen(year));
//trying to write my strings and ints into one string
snprintf(string, memory, "%s der %d.%s %d\n", dayofweek, day, month, year);
printf("%s\n", string);
free(string);
return 0;
}