Как исправить агрегацию Spark max `содержит недопустимые символы из числа` error? - PullRequest
0 голосов
/ 30 октября 2019

Простое агрегирование приводит к ошибке недопустимых символов:

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 " ,;{}()\n\t=". Please use alias to rename it.;

Особое замечание, что у метода max нет псевдонимов. Итак, как сгруппировать более 2 столбцов и выбрать max в поле int?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Ошибка:

Attribute name "max(my_date_int)" contains
invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.;

означает, что вы не можете write a Dataframe с недопустимыми именами столбцов, в ваших случаях, потому что он содержит скобки. Попробуйте переименовать столбец max, например,

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://...")
0 голосов
/ 30 октября 2019

Иногда прямой макс не может работать, попробуйте заключить макс в "agg", как показано ниже

df.groupBy($"id".alias("g_id"), $"my_date".alias("g_my_date_int")).agg(max("my_date_int"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...