如何修复Spark聚合最大值"包含"错误中的无效字符



简单聚合导致无效字符错误:

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.;

意味着您不能使用无效列名writeDataframe,在您的情况下,因为它包含括号。尝试重命名最大列,例如

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"))

相关内容

  • 没有找到相关文章

最新更新