Skip to content

feat: Add Spark-compatible monthname function to datafusion-spark#21639

Open
JeelRajodiya wants to merge 3 commits intoapache:mainfrom
JeelRajodiya:feat/spark-monthname-function
Open

feat: Add Spark-compatible monthname function to datafusion-spark#21639
JeelRajodiya wants to merge 3 commits intoapache:mainfrom
JeelRajodiya:feat/spark-monthname-function

Conversation

@JeelRajodiya
Copy link
Copy Markdown

Rationale

The datafusion-spark crate is missing the monthname function. Spark's monthname(date) returns the three-letter abbreviated month name (Jan, Feb, ..., Dec) from a date or timestamp — commonly used in Spark SQL workloads.

What changes are included in this PR?

Adds SparkMonthName to datafusion-spark's datetime functions. It uses arrow::compute::date_part(DatePart::Month) to extract the month number and maps it to the abbreviated name. The signature accepts Timestamp types with automatic coercion from Date32/Date64.

Are these changes tested?

Yes — 6 unit tests covering scalar dates, array dates with nulls, null scalars, timestamp microseconds, all 12 months, and return field nullability.

Are there any user-facing changes?

New monthname scalar function available when using datafusion-spark.

@github-actions github-actions bot added the spark label Apr 15, 2026
Implements `monthname(date_or_timestamp)` that returns the three-letter
abbreviated month name (Jan, Feb, ..., Dec) from a date or timestamp,
matching Apache Spark's behavior.
@JeelRajodiya JeelRajodiya force-pushed the feat/spark-monthname-function branch from d13c56b to a4228b9 Compare April 15, 2026 06:32
}

#[cfg(test)]
mod tests {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we have these tests as SLTs instead?

Copy link
Copy Markdown
Author

@JeelRajodiya JeelRajodiya Apr 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done! I've moved to SLTs. thanks for pointing it out.

Comment on lines +110 to +111
Some(m) => Ok(month_number_to_name(m)),
None => Ok(None),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do these need to be Results?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I realized that date part would always return valit month int, so we don't need results. I've refoctored it.

name.to_string(),
)))),
None => {
exec_err!("Invalid month number: {month_val}")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This branch doesn't seem to be present on the array path below?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I've made it consistant now.

@github-actions github-actions bot added the sqllogictest SQL Logic Tests (.slt) label Apr 16, 2026
@JeelRajodiya JeelRajodiya force-pushed the feat/spark-monthname-function branch from d32a486 to e066989 Compare April 16, 2026 10:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

spark sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants