Skip to content

Improvements to user guide for DataFrames #11388

Open

Description

@alamb

First of all, I'm not sure we need the distinction between "user guide" and "library user guide" when it comes to data frames. The only way you can use a data frame is if you are using it as library? I'm unsure why I should be reading one section or the other.

Second, I think you lose a lot of context by removing the table. The SessionContext and DataFrame structs both expose large API surfaces. I think they become much easier to digest once you understand that there is actually a fairly small number of categories of things being exposed. However, the API documentation doesn't provide any way of seeing this structure. Ideally, there would be something like a way to do something like tagging the methods into different categories.

But I think the important part is simply to note that there are transformations, methods that execute the frame and administrative methods. I might further break down the methods that execute the frame into those that return a new frame in some way and those that write to a data sink? That is, I'm not sure its necessary to list every method in each of these categories but it is helpful to identify the categories. That being said, I think a table, perhaps more granular, with links to the API documentation for each method and possibly even links to the SQL equivalent where appropriate would be a good long term goal. Is there some tooling / macros we could build to support this in a sustainable way?

Also, is it the case that I can only create a data frame via SessionContext? The typically in the introduction suggests there are other ways of doing it. I wonder if it would be better to be more precise and just enumerate the different ways you can create a data frame. I think it's something like: read from a file, read from a table (which really covers a lot of possibilities), execute SQL statements.

So - I suppose to make this executable within the context of this PR - perhaps reduce the tables to more of a summary? But also curious to hear from others.

Finally, not for this PR, I wonder if SessionContext warrants its own section. As with DataFrame I think it would benefit from a discussion of the different categories of things it can be used for. Related, it's becoming clear to me from poking around the documentation and methods its becoming clear that there is a great deal of flexibility in mixing and matching SQL and data frames if you want to but I'm not sure that's coming across in the guides? When I have time I can try drafting something to see how it might fit.

Originally posted by @efredine in #11324 (comment)

Activity

  1. sm4rtm4art commented on Oct 14, 2025

    @sm4rtm4art
    Contributor

    take

  2. sm4rtm4art commented on Oct 16, 2025

    @sm4rtm4art
    Contributor

    General thought

    Is there a recommended length for documentation pages?
    By “Do good and talk about it” (“Write cool software and tell people about it” – Paul Dix), I interpret “talk about it” as: catch interest quickly and then give readers a path toward deeper understanding—the why, the how, and also the how-not/what-not.

    Based on that, I’d suggest keeping the “user” description broader, general reference-rich and more leaning towards SQL, and making the “library user guide” deeper and more relational, guiding readers toward docs.rs, leaning towards Rust.

    • User Guide: ~200–500 lines
    • Deep Dive: ~500–1000 lines
      (These are ballpark ranges, not hard limits.)

    Proposal based on the above

    1. Should we keep two documents as mentioned? If yes, I would write “A Gentle Introduction to DataFrames” for the User Guide—covering general ideas, connectivity, and usage—and a “Library User Guide” that is a deeper dive into DataFrames.

    2. This split might also address the second part of the issue by giving a path from the basic user context of DataFrames to how SessionContext fits in.

    Do you agree with this concept, any suggestions, or am I on the wrong track?

  3. alamb commented on Oct 17, 2025

    @alamb
    ContributorAuthor

    It sound like a good split to me -- thank you

    https://datafusion.apache.org/

    Image

    I think specifically @efredine was talking about this page: https://datafusion.apache.org/library-user-guide/using-the-dataframe-api.html

    maybe that would be a good place to start and see if it makes any sense / what could be done to improve it

  4. sm4rtm4art commented on Oct 30, 2025

    @sm4rtm4art
    Contributor

    Hi everyone,

    I've been making significant progress on the DataFrame API documentation for issue #11388. As I delved into the topic (and fell down a rabbit hole 🌀), I found that a more comprehensive guide would be highly beneficial. To keep the content well-structured and easy to navigate, I've split it into the following interconnected files:

    1. index.md (~100 lines) - Entry Point
    2. concepts.md (~650 lines) - Unofficial Topic: DataFrames and where they live
    3. creating-dataframes.md (~1900 lines, which I'm working to condense) - Unofficial Topic: Birth of a DataFrame
    4. transformations.md (in progress, focus on the Dataframe API methods, low on SQL comparable queries. ~1900 lines) - Unofficial Topic: Life of a DataFrame
    5. writing-dataframes.md (~300 lines) - Unofficial Topic: Death of a DataFrame and its memorials
    6. best-practices.md (~200 lines) - Unofficial Topic: How to treat DataFrames right

    Given the total size of this contribution, I want to make the review process as smooth as possible for everyone.

    Proposal for the review process:

    My suggestion is to submit this as a series of smaller, sequential PRs rather than one massive one. I would start with concepts.md as the first PR and then follow up with the others.

    Does this approach work for you, or would you prefer a single large pull request?

    My goal is to create a thorough and welcoming resource.

    Thanks for your guidance!

    P.S. @alamb: On a related note, in your podcast with Developer Voices, you were asked about the RecordBatch size of ~8000 rows and explained that research papers show why 4k-16k is optimal. I'm very interested in this! If you could share a link to that research, I'd appreciate it. I don't plan to put it in the docs (yet), but I'm curious.

    P.s.s : The unnofficial Topics (won't be in the Docs) is kind of taken from the interaction of light with matter :)

  5. alamb commented on Oct 30, 2025

    @alamb
    ContributorAuthor

    P.S. @alamb: On a related note, in your podcast with Developer Voices, you were asked about the RecordBatch size of ~8000 rows and explained that research papers show why 4k-16k is optimal. I'm very interested in this! If you could share a link to that research, I'd appreciate it. I don't plan to put it in the docs (yet), but I'm curious.

    The paper I had in mind is Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask

    Specifically this chart

    Image
  6. alamb commented on Oct 30, 2025

    @alamb
    ContributorAuthor

    Proposal for the review process:

    My suggestion is to submit this as a series of smaller, sequential PRs rather than one massive one. I would start with concepts.md as the first PR and then follow up with the others.

    This sounds like a good plan to me. Another alternative is to make one giant PR as a draft and then submit PRs one by one (referring people to the large PR if they want to see the overall context)

    My goal is to create a thorough and welcoming resource.

    Thank you!

  7. sm4rtm4art commented on Nov 26, 2025

    @sm4rtm4art
    Contributor

    Hi all,

    Just a quick heads up that I'm still actively working on this with all the spare time and energy I can provide. It's taken longer than expected, but I'm convinced it will add value to the project.

    Sorry for being so brief—I'm truly grateful for the chance to contribute and supporting otheres with documentation.

    Edit: Time estimate : Will try to open the PR end of the week or mid next week! ⏲️

  8. sm4rtm4art commented on Dec 29, 2025

    @sm4rtm4art
    Contributor

    Hi all,

    Quick update: I'm in the final refinement stages of the DataFrame documentation. I discovered Diátaxis and later how-to-write-exceptional-documentation_api-reference during the process and restructured parts of the docs to follow that framework.

    Note about the linked commits: Those are from my working branch and reference this issue automatically via commit messages. They represent early work-in-progress, not final content — please disregard them for now. I feel actually ashamed of them.

    Sorry for missing my original timeline — learning DataFusion internals, query engine concepts, and documentation best practices took longer than expected. But I'm confident the result will be worth it.

    Looking forward to opening a PR soon!

  9. sm4rtm4art commented on Mar 4, 2026

    @sm4rtm4art
    Contributor

    Hey everyone,

    Just wanted to give a quick update to let you know that I am still actively working on this issue! The scope expanded a bit more than I initially expected, but I’ve learned a ton and am really dedicated to adding value to the project.

    I had a few personal and technical hurdles to overcome recently, but those are fully resolved now. I've put a lot of hours into researching and writing this, and I believe I've now covered almost all the methods the DataFrame API provides.

    Right now, I'm in the final stretch. I am currently polishing the text and refactoring the structure (specifically, breaking down a massive monolithic markdown file into smaller, logical pieces in a new directory structure).
    My goal is to make the final PR easy for you all to review and maintain in the future. Furthermore, I would like to give others the opportunity to learn about and use useful functions in the documentation.

    I do have one minor technical question for the group:
    Sphinx offers a great way to highlight specific lines in code blocks using emphasize-lines (see Sphinx docs). However, cargo test --doc doesn't seem to parse Sphinx's directives for testing, as it strictly expects standard markdown ```rust blocks.

    This is not a blocker! Just a nice to have
    Does anyone know a clean workaround for this?
    For now, I will stick to standard markdown code blocks so that the doctests pass which is prioritized, but I'd love to use line highlights if possible.

    Thanks again for your generous patience and for letting me tackle this. I'm looking forward to opening the PR soon!

  10. alamb commented on Mar 4, 2026

    @alamb
    ContributorAuthor

    Sphinx offers a great way to highlight specific lines in code blocks using emphasize-lines (see Sphinx docs). However, cargo test --doc doesn't seem to parse Sphinx's directives for testing, as it strictly expects standard markdown ```rust blocks.

    I think we use doc-comment to run the tests via the rust cargo test --doc

    doc-comment = "0.3"

    And

    doc_comment::doctest!(
    "../../../docs/source/user-guide/arrow-introduction.md",
    user_guide_arrow_introduction
    );

    Maybe there is some setting there we could use (we are on the 0.3 release of doc-comment and there is a 0.4 release...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions