From 8dd74dac89316bf3bfb46063ae842f02a791dcf7 Mon Sep 17 00:00:00 2001 From: Haejoon Lee Date: Sun, 26 Nov 2023 04:09:44 +0900 Subject: [PATCH 1/3] [SPARK-46103][PYTHON][BUILD][DOCS] Enhancing PySpark documentation --- dev/requirements.txt | 6 +- .../docs/source/_static/spark-logo-dark.png | Bin 0 -> 23555 bytes .../docs/source/_static/spark-logo-light.png | Bin 0 -> 18773 bytes .../autosummary/accessor_attribute.rst | 6 ++ .../autosummary/accessor_method.rst | 6 ++ .../autosummary/class_with_docs.rst | 4 +- .../_templates/autosummary/plot_class.rst | 53 ++++++++++++++++++ python/docs/source/conf.py | 6 +- .../source/reference/pyspark.pandas/frame.rst | 8 ++- .../reference/pyspark.pandas/indexing.rst | 12 ++++ .../source/reference/pyspark.pandas/io.rst | 5 ++ .../reference/pyspark.pandas/series.rst | 22 +++++++- .../reference/pyspark.sql/spark_session.rst | 14 +++++ 13 files changed, 135 insertions(+), 7 deletions(-) create mode 100644 python/docs/source/_static/spark-logo-dark.png create mode 100644 python/docs/source/_static/spark-logo-light.png create mode 100644 python/docs/source/_templates/autosummary/accessor_attribute.rst create mode 100644 python/docs/source/_templates/autosummary/accessor_method.rst create mode 100644 python/docs/source/_templates/autosummary/plot_class.rst diff --git a/dev/requirements.txt b/dev/requirements.txt index 7de55ec24968..a7af0907c726 100644 --- a/dev/requirements.txt +++ b/dev/requirements.txt @@ -31,12 +31,12 @@ pandas-stubs<1.2.0.54 mkdocs # Documentation (Python) -pydata_sphinx_theme +pydata_sphinx_theme==0.13 ipython nbsphinx numpydoc -jinja2<3.0.0 -sphinx<3.1.0 +jinja2 +sphinx==4.2.0 sphinx-plotly-directive sphinx-copybutton docutils<0.18.0 diff --git a/python/docs/source/_static/spark-logo-dark.png b/python/docs/source/_static/spark-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7460faec37fc7923d11d968fe8bc9d90f72381fd GIT binary patch literal 23555 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. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst DataFrame.spark.frame DataFrame.spark.cache @@ -319,8 +320,8 @@ specific plotting methods of the form ``DataFrame.plot.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst - DataFrame.plot DataFrame.plot.area DataFrame.plot.barh DataFrame.plot.bar @@ -330,6 +331,10 @@ specific plotting methods of the form ``DataFrame.plot.``. DataFrame.plot.pie DataFrame.plot.scatter DataFrame.plot.density + +.. autosummary:: + :toctree: api/ + DataFrame.hist DataFrame.boxplot DataFrame.kde @@ -341,6 +346,7 @@ These can be accessed by ``DataFrame.pandas_on_spark.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst DataFrame.pandas_on_spark.apply_batch DataFrame.pandas_on_spark.transform_batch diff --git a/python/docs/source/reference/pyspark.pandas/indexing.rst b/python/docs/source/reference/pyspark.pandas/indexing.rst index 7ec4387bb679..301e849ffe28 100644 --- a/python/docs/source/reference/pyspark.pandas/indexing.rst +++ b/python/docs/source/reference/pyspark.pandas/indexing.rst @@ -129,8 +129,14 @@ in Spark. These can be accessed by ``Index.spark.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_attribute.rst Index.spark.column + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + Index.spark.transform Sorting @@ -308,9 +314,15 @@ in Spark. These can be accessed by ``MultiIndex.spark.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_attribute.rst MultiIndex.spark.data_type MultiIndex.spark.column + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + MultiIndex.spark.transform MultiIndex Sorting diff --git a/python/docs/source/reference/pyspark.pandas/io.rst b/python/docs/source/reference/pyspark.pandas/io.rst index 118dd49a4ada..fd41a03699ca 100644 --- a/python/docs/source/reference/pyspark.pandas/io.rst +++ b/python/docs/source/reference/pyspark.pandas/io.rst @@ -69,6 +69,11 @@ Generic Spark I/O :toctree: api/ read_spark_io + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + DataFrame.spark.to_spark_io Flat File / CSV diff --git a/python/docs/source/reference/pyspark.pandas/series.rst b/python/docs/source/reference/pyspark.pandas/series.rst index 01fb5aa87fb1..88d1861c6ccf 100644 --- a/python/docs/source/reference/pyspark.pandas/series.rst +++ b/python/docs/source/reference/pyspark.pandas/series.rst @@ -270,8 +270,14 @@ in Spark. These can be accessed by ``Series.spark.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_attribute.rst Series.spark.column + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + Series.spark.transform Series.spark.apply @@ -304,6 +310,7 @@ Datetime Properties .. autosummary:: :toctree: api/ + :template: autosummary/accessor_attribute.rst Series.dt.date Series.dt.year @@ -333,6 +340,7 @@ Datetime Methods .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst Series.dt.normalize Series.dt.strftime @@ -353,6 +361,7 @@ like ``Series.str.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst Series.str.capitalize Series.str.cat @@ -416,10 +425,16 @@ the ``Series.cat`` accessor. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_attribute.rst Series.cat.categories Series.cat.ordered Series.cat.codes + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + Series.cat.rename_categories Series.cat.reorder_categories Series.cat.add_categories @@ -438,8 +453,8 @@ specific plotting methods of the form ``Series.plot.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst - Series.plot Series.plot.area Series.plot.bar Series.plot.barh @@ -449,6 +464,10 @@ specific plotting methods of the form ``Series.plot.``. Series.plot.line Series.plot.pie Series.plot.kde + +.. autosummary:: + :toctree: api/ + Series.hist Serialization / IO / Conversion @@ -476,6 +495,7 @@ These can be accessed by ``Series.pandas_on_spark.``. .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst Series.pandas_on_spark.transform_batch diff --git a/python/docs/source/reference/pyspark.sql/spark_session.rst b/python/docs/source/reference/pyspark.sql/spark_session.rst index f25dbab5f6b9..f242e4439cf4 100644 --- a/python/docs/source/reference/pyspark.sql/spark_session.rst +++ b/python/docs/source/reference/pyspark.sql/spark_session.rst @@ -29,12 +29,21 @@ See also :class:`SparkSession`. :toctree: api/ SparkSession.active + +.. autosummary:: + :toctree: api/ + :template: autosummary/accessor_method.rst + SparkSession.builder.appName SparkSession.builder.config SparkSession.builder.enableHiveSupport SparkSession.builder.getOrCreate SparkSession.builder.master SparkSession.builder.remote + +.. autosummary:: + :toctree: api/ + SparkSession.catalog SparkSession.conf SparkSession.createDataFrame @@ -58,8 +67,13 @@ Spark Connect Only .. autosummary:: :toctree: api/ + :template: autosummary/accessor_method.rst SparkSession.builder.create + +.. autosummary:: + :toctree: api/ + SparkSession.addArtifact SparkSession.addArtifacts SparkSession.copyFromLocalToFs From fcc368daa08039d4e17c626c610c48c9c1b22dce Mon Sep 17 00:00:00 2001 From: Haejoon Lee Date: Sun, 26 Nov 2023 06:52:55 +0900 Subject: [PATCH 2/3] Update build_and_test.yml --- .github/workflows/build_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 5033ab00601a..a4c9ec304258 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -751,7 +751,7 @@ jobs: # See also https://issues.apache.org/jira/browse/SPARK-35375. # Pin the MarkupSafe to 2.0.1 to resolve the CI error. # See also https://issues.apache.org/jira/browse/SPARK-38279. - python3.9 -m pip install 'sphinx<3.1.0' mkdocs pydata_sphinx_theme sphinx-copybutton nbsphinx numpydoc 'jinja2<3.0.0' 'markupsafe==2.0.1' 'pyzmq<24.0.0' + python3.9 -m pip install 'sphinx==4.2.0' mkdocs 'pydata_sphinx_theme==0.13' sphinx-copybutton nbsphinx numpydoc jinja2 'markupsafe==2.0.1' 'pyzmq<24.0.0' python3.9 -m pip install ipython_genutils # See SPARK-38517 python3.9 -m pip install sphinx_plotly_directive 'numpy>=1.20.0' pyarrow pandas 'plotly>=4.8' python3.9 -m pip install 'docutils<0.18.0' # See SPARK-39421 From d85133ed15d120d773b1af445287ec69c3305e0a Mon Sep 17 00:00:00 2001 From: Haejoon Lee Date: Sun, 26 Nov 2023 15:01:49 +0900 Subject: [PATCH 3/3] Retrigger CI