简单聚合导致无效字符错误:
val result = df
.groupBy($"id".alias("g_id"), $"my_date".alias("g_my_date_int")).max("my_date_int")
result.write.mode(saveMode = SaveMode.Overwrite).parquet("file://...")
错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException: Attribute name "max(my_date_int)" contains
invalid character(s) among " ,;{}()nt=". Please use alias to rename it.;
这里特别指出的是max
方法没有任何别名参数。那么如何对2列以上进行分组并选择max
在int字段上?
错误:
Attribute name "max(my_date_int)" contains
invalid character(s) among " ,;{}()nt=". Please use alias to rename it.;
意味着您不能使用无效列名write
或Dataframe
,在您的情况下,因为它包含括号。尝试重命名最大列,例如
val result = df
.groupBy($"id".alias("g_id"), $"my_date".alias("g_my_date_int")).agg(max("my_date_int") as "max_my_date_int")
result.write.mode(saveMode = SaveMode.Overwrite).parquet("file://...")
有时,直接max无法工作,请尝试将max封装在下面的"agg"中
df.groupBy($"id".alias("g_id"), $"my_date".alias("g_my_date_int")).agg(max("my_date_int"))