This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git


The following commit(s) were added to refs/heads/master by this push:
     new eee44b5096 [GH-2489] Update the old dependencies in Sedona docker 
image (#2518)
eee44b5096 is described below

commit eee44b509624d9e4022a6dd40d9b07d72a369a20
Author: Jia Yu <[email protected]>
AuthorDate: Sun Nov 23 22:16:10 2025 -0700

    [GH-2489] Update the old dependencies in Sedona docker image (#2518)
---
 .github/workflows/docker-build.yml                 |  21 +-
 docker/build.sh                                    |   2 +-
 docker/install-sedona.sh                           |  10 +-
 docker/install-spark.sh                            |   6 +-
 docker/requirements.txt                            |   9 +-
 docker/sedona-docker.dockerfile                    |  25 ++-
 docker/test-notebooks.sh                           | 227 +++++++++++++++++++++
 docker/zeppelin/conf/interpreter.json              |   4 +-
 docs/usecases/ApacheSedonaCore.ipynb               |   2 +-
 docs/usecases/ApacheSedonaRaster.ipynb             |   4 +-
 docs/usecases/ApacheSedonaSQL.ipynb                |   2 +-
 ...eSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb |   2 +-
 docs/usecases/Sedona_OvertureMaps_GeoParquet.ipynb |   8 +-
 13 files changed, 279 insertions(+), 43 deletions(-)

diff --git a/.github/workflows/docker-build.yml 
b/.github/workflows/docker-build.yml
index 790daa1778..a34aaa8ade 100644
--- a/.github/workflows/docker-build.yml
+++ b/.github/workflows/docker-build.yml
@@ -46,14 +46,14 @@ jobs:
       fail-fast: true
       matrix:
         os: ['ubuntu-latest']
-        spark: ['3.5.1', '3.4.3']
+        spark: ['4.0.1']
         include:
-          - spark: 3.5.1
+          - spark: 4.0.1
             sedona: 'latest'
-            geotools: '33.1-rc1'
-          - spark: 3.4.3
-            sedona: 1.6.0
-            geotools: 28.2
+            geotools: '33.1'
+          - spark: 4.0.1
+            sedona: 1.8.0
+            geotools: '33.1'
     runs-on: ${{ matrix.os }}
     defaults:
       run:
@@ -63,7 +63,7 @@ jobs:
       - uses: actions/setup-java@v5
         with:
           distribution: 'zulu'
-          java-version: 11
+          java-version: 17
       - name: Cache Maven packages
         uses: actions/cache@v4
         with:
@@ -85,3 +85,10 @@ jobs:
           SEDONA_VERSION: ${{ matrix.sedona }}
           GEOTOOLS_VERSION: ${{ matrix.geotools }}
         run: ./docker/build.sh ${SPARK_VERSION} ${SEDONA_VERSION} local 
${GEOTOOLS_VERSION}
+      - name: Test notebooks
+        run: |
+          chmod +x docker/test-notebooks.sh
+          docker run --rm \
+            -v ${{ github.workspace 
}}/docker/test-notebooks.sh:/opt/test-notebooks.sh:ro \
+            apache/sedona:${{ matrix.sedona }} \
+            /bin/bash /opt/test-notebooks.sh
diff --git a/docker/build.sh b/docker/build.sh
index 101295cc08..7cf3d95a8c 100755
--- a/docker/build.sh
+++ b/docker/build.sh
@@ -80,7 +80,7 @@ if [ "$SEDONA_VERSION" = "latest" ]; then
     echo "Using latest geotools-wrapper version: $GEOTOOLS_WRAPPER_VERSION"
 
     # The compilation must take place outside Docker to avoid unnecessary 
maven packages
-    mvn clean install -DskipTests -Dspark="${SEDONA_SPARK_VERSION}" 
-Dscala=2.12
+    mvn clean install -DskipTests -Dspark="${SEDONA_SPARK_VERSION}" 
-Dscala=2.13
 fi
 
 # -- Building the image
diff --git a/docker/install-sedona.sh b/docker/install-sedona.sh
index 9e404c6a86..35507f2e57 100755
--- a/docker/install-sedona.sh
+++ b/docker/install-sedona.sh
@@ -35,21 +35,21 @@ fi
 if [ "$sedona_version" = "latest" ]; then
   # Code to execute when SEDONA_VERSION is "latest"
   cp "${SEDONA_HOME}"/spark-shaded/target/sedona-spark-shaded-*.jar 
"${SPARK_HOME}"/jars/
-  cd "${SEDONA_HOME}"/python;pip3 install .
+  cd "${SEDONA_HOME}"/python;pip3 install . --break-system-packages
 else
   # Code to execute when SEDONA_VERSION is not "latest"
   # Download Sedona
-  curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-"${sedona_spark_version}"_2.12/"${sedona_version}"/sedona-spark-shaded-"${sedona_spark_version}"_2.12-"${sedona_version}".jar
 -o 
"$SPARK_HOME"/jars/sedona-spark-shaded-"${sedona_spark_version}"_2.12-"${sedona_version}".jar
+  curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/org/apache/sedona/sedona-spark-shaded-"${sedona_spark_version}"_2.13/"${sedona_version}"/sedona-spark-shaded-"${sedona_spark_version}"_2.13-"${sedona_version}".jar
 -o 
"$SPARK_HOME"/jars/sedona-spark-shaded-"${sedona_spark_version}"_2.13-"${sedona_version}".jar
 
   # Install Sedona Python
-  pip3 install apache-sedona=="${sedona_version}"
+  pip3 install apache-sedona=="${sedona_version}" --break-system-packages
 fi
 
 # Download gresearch spark extension
-curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/uk/co/gresearch/spark/spark-extension_2.12/"${spark_extension_version}"-"${spark_compat_version}"/spark-extension_2.12-"${spark_extension_version}"-"${spark_compat_version}".jar
 -o 
"$SPARK_HOME"/jars/spark-extension_2.12-"${spark_extension_version}"-"${spark_compat_version}".jar
+curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/uk/co/gresearch/spark/spark-extension_2.13/"${spark_extension_version}"-"${spark_compat_version}"/spark-extension_2.13-"${spark_extension_version}"-"${spark_compat_version}".jar
 -o 
"$SPARK_HOME"/jars/spark-extension_2.13-"${spark_extension_version}"-"${spark_compat_version}".jar
 
 # Install Spark extension Python
-pip3 install 
pyspark-extension=="${spark_extension_version}"."${spark_compat_version}"
+pip3 install 
pyspark-extension=="${spark_extension_version}"."${spark_compat_version}" 
--break-system-packages
 
 # Download GeoTools jar
 curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/org/datasyslab/geotools-wrapper/"${geotools_wrapper_version}"/geotools-wrapper-"${geotools_wrapper_version}".jar
 -o "$SPARK_HOME"/jars/geotools-wrapper-"${geotools_wrapper_version}".jar
diff --git a/docker/install-spark.sh b/docker/install-spark.sh
index a66945c2fd..6e3023233e 100755
--- a/docker/install-spark.sh
+++ b/docker/install-spark.sh
@@ -23,7 +23,6 @@ set -e
 spark_version=$1
 hadoop_s3_version=$2
 aws_sdk_version=$3
-spark_xml_version=$4
 
 # Download Spark jar and set up PySpark
 curl --retry 5 --retry-delay 10 --retry-connrefused 
https://archive.apache.org/dist/spark/spark-"${spark_version}"/spark-"${spark_version}"-bin-hadoop3.tgz
 -o spark.tgz
@@ -32,10 +31,9 @@ rm spark.tgz && rm -rf spark-"${spark_version}"-bin-hadoop3
 
 # Add S3 jars
 curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/"${hadoop_s3_version}"/hadoop-aws-"${hadoop_s3_version}".jar
 -o "${SPARK_HOME}"/jars/hadoop-aws-"${hadoop_s3_version}".jar
-curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/"${aws_sdk_version}"/aws-java-sdk-bundle-"${aws_sdk_version}".jar
 -o "${SPARK_HOME}"/jars/aws-java-sdk-bundle-"${aws_sdk_version}".jar
 
-# Add spark-xml jar
-curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/com/databricks/spark-xml_2.12/"${spark_xml_version}"/spark-xml_2.12-"${spark_xml_version}".jar
 -o "${SPARK_HOME}"/jars/spark-xml_2.12-"${spark_xml_version}".jar
+# Add AWS SDK v2 bundle (required by spark-extension 2.14.2+)
+curl --retry 5 --retry-delay 10 --retry-connrefused 
https://repo1.maven.org/maven2/software/amazon/awssdk/bundle/"${aws_sdk_version}"/bundle-"${aws_sdk_version}".jar
 -o "${SPARK_HOME}"/jars/aws-sdk-v2-bundle-"${aws_sdk_version}".jar
 
 # Set up master IP address and executor memory
 cp "${SPARK_HOME}"/conf/spark-defaults.conf.template 
"${SPARK_HOME}"/conf/spark-defaults.conf
diff --git a/docker/requirements.txt b/docker/requirements.txt
index 3ed7285f49..06a84b68c6 100644
--- a/docker/requirements.txt
+++ b/docker/requirements.txt
@@ -1,15 +1,16 @@
 attrs
 descartes
 fiona==1.10.1
-geopandas==1.0.1
+geopandas==1.1.1
 ipykernel
 ipywidgets
 jupyterlab==4.4.9
 jupyterlab-widgets==3.0.13
 keplergl==0.3.7
 matplotlib
-numpy<2
-pandas==1.5.3
+numpy==1.26.4
+pandas==2.3.3
+py4j==0.10.9.9
 pydeck==0.9.1
 rasterio==1.4.3
-shapely==2.0.4
+shapely==2.1.2
diff --git a/docker/sedona-docker.dockerfile b/docker/sedona-docker.dockerfile
index 3153382c72..2969f659cf 100644
--- a/docker/sedona-docker.dockerfile
+++ b/docker/sedona-docker.dockerfile
@@ -15,16 +15,15 @@
 # limitations under the License.
 #
 
-FROM ubuntu:22.04
+FROM ubuntu:24.04
 
 ARG shared_workspace=/opt/workspace
-ARG spark_version=3.5.5
-ARG hadoop_s3_version=3.3.4
-ARG aws_sdk_version=1.12.402
-ARG spark_xml_version=0.16.0
-ARG sedona_version=1.7.1
-ARG geotools_wrapper_version=1.7.1-28.5
-ARG spark_extension_version=2.11.0
+ARG spark_version=4.0.1
+ARG hadoop_s3_version=3.4.1
+ARG aws_sdk_version=2.38.2
+ARG sedona_version=1.8.0
+ARG geotools_wrapper_version=1.8.1-33.1
+ARG spark_extension_version=2.14.2
 ARG zeppelin_version=0.12.0
 
 # Set up envs
@@ -37,21 +36,21 @@ RUN mkdir ${SEDONA_HOME}
 
 ENV SPARK_MASTER_HOST=localhost
 ENV SPARK_MASTER_PORT=7077
-ENV PYTHONPATH=$SPARK_HOME/python
 ENV PYSPARK_PYTHON=python3
 ENV PYSPARK_DRIVER_PYTHON=jupyter
+ENV PYTHONPATH=${SPARK_HOME}/python
 
 # Set up OS libraries and PySpark
 RUN apt-get update
-RUN apt-get install -y openjdk-19-jdk-headless curl python3-pip maven
-RUN pip3 install --upgrade pip && pip3 install pipenv
+RUN apt-get install -y openjdk-17-jdk-headless curl python3-pip maven
+RUN pip3 install pipenv --break-system-packages
 COPY ./docker/install-spark.sh ${SEDONA_HOME}/docker/
 RUN chmod +x ${SEDONA_HOME}/docker/install-spark.sh
-RUN ${SEDONA_HOME}/docker/install-spark.sh ${spark_version} 
${hadoop_s3_version} ${aws_sdk_version} ${spark_xml_version}
+RUN ${SEDONA_HOME}/docker/install-spark.sh ${spark_version} 
${hadoop_s3_version} ${aws_sdk_version}
 
 # Install Python dependencies
 COPY docker/requirements.txt /opt/requirements.txt
-RUN pip3 install -r /opt/requirements.txt
+RUN pip3 install -r /opt/requirements.txt --break-system-packages
 
 
 # Copy local compiled jars and python code to the docker environment
diff --git a/docker/test-notebooks.sh b/docker/test-notebooks.sh
new file mode 100755
index 0000000000..e119466115
--- /dev/null
+++ b/docker/test-notebooks.sh
@@ -0,0 +1,227 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -e
+
+# Set up environment variables if not already set
+export SPARK_HOME=${SPARK_HOME:-/opt/spark}
+export PYSPARK_PYTHON=${PYSPARK_PYTHON:-python3}
+export PYSPARK_DRIVER_PYTHON=${PYSPARK_DRIVER_PYTHON:-python3}
+# Add py4j to PYTHONPATH (it's in Spark's python/lib directory)
+PY4J_ZIP=$(find "$SPARK_HOME/python/lib" -name "py4j-*.zip" | head -1)
+if [ -n "$PY4J_ZIP" ]; then
+    export PYTHONPATH=${SPARK_HOME}/python:${PY4J_ZIP}:${PYTHONPATH}
+else
+    export PYTHONPATH=${SPARK_HOME}/python:${PYTHONPATH}
+fi
+
+# Configure Spark to run in local mode (no cluster needed for testing)
+export SPARK_MASTER=${SPARK_MASTER:-local[*]}
+
+EXAMPLES_DIR="/opt/workspace/examples"
+FAILED_TESTS=0
+PASSED_TESTS=0
+
+echo "========================================="
+echo "Testing Jupyter Notebooks"
+echo "========================================="
+
+# Check if examples directory exists
+if [ ! -d "$EXAMPLES_DIR" ]; then
+    echo "Error: Examples directory $EXAMPLES_DIR does not exist"
+    exit 1
+fi
+
+# Find all .ipynb files only in the root level (exclude subdirectories like 
contrib)
+NOTEBOOK_FILES=$(find "$EXAMPLES_DIR" -maxdepth 1 -name "*.ipynb" -type f)
+
+if [ -z "$NOTEBOOK_FILES" ]; then
+    echo "No .ipynb files found in $EXAMPLES_DIR (root level only)"
+    exit 0
+fi
+
+NOTEBOOK_COUNT=$(echo "$NOTEBOOK_FILES" | wc -l)
+echo "Found $NOTEBOOK_COUNT notebook file(s) to test (root level only, 
excluding subdirectories)"
+echo ""
+
+# Convert and test each notebook
+for NOTEBOOK in $NOTEBOOK_FILES; do
+    NOTEBOOK_NAME=$(basename "$NOTEBOOK" .ipynb)
+    PYTHON_FILE="${NOTEBOOK%.ipynb}.py"
+
+    echo "Testing: $NOTEBOOK_NAME"
+    echo "  Converting notebook to Python..."
+
+    # Convert notebook to Python using jupyter nbconvert
+    if jupyter nbconvert --to python "$NOTEBOOK" --stdout > "$PYTHON_FILE" 
2>/dev/null; then
+        echo "  ✓ Converted to $PYTHON_FILE"
+    else
+        echo "  ✗ Failed to convert notebook"
+        FAILED_TESTS=$((FAILED_TESTS + 1))
+        continue
+    fi
+
+    # Check if the Python file was created and has content
+    if [ ! -s "$PYTHON_FILE" ]; then
+        echo "  ✗ Converted Python file is empty"
+        FAILED_TESTS=$((FAILED_TESTS + 1))
+        continue
+    fi
+
+    # Modify the Python file to use local mode instead of cluster mode
+    # Replace common Spark master URLs with local[*]
+    sed -i 's|\.master("spark://[^"]*")|.master("local[*]")|g' "$PYTHON_FILE"
+    sed -i 's|\.master('"'"'spark://[^'"'"']*'"'"')|.master("local[*]")|g' 
"$PYTHON_FILE"
+    # Also handle cases where master might be set via config
+    sed -i 's|spark://localhost:7077|local[*]|g' "$PYTHON_FILE"
+
+    # Fix data file paths - notebooks reference "data/" but files are in 
"examples/data/"
+    # Replace paths like "data/file.csv" with "examples/data/file.csv"
+    sed -i 's|"data/|"examples/data/|g' "$PYTHON_FILE"
+    sed -i "s|'data/|'examples/data/|g" "$PYTHON_FILE"
+    # Also handle absolute paths
+    sed -i 's|/opt/workspace/data/|/opt/workspace/examples/data/|g' 
"$PYTHON_FILE"
+
+    # Remove IPython magic commands that don't work in plain Python
+    # Use Python to properly extract code from get_ipython().run_cell_magic() 
calls
+    PYTHON_FILE_PATH="$PYTHON_FILE" python3 << 'PYTHON_CLEANUP'
+import re
+import os
+import ast
+
+file_path = os.environ['PYTHON_FILE_PATH']
+with open(file_path, 'r') as f:
+    lines = f.readlines()
+
+output_lines = []
+i = 0
+while i < len(lines):
+    line = lines[i]
+    if 'get_ipython().run_cell_magic' in line:
+        # Try to parse this line as Python code to extract the string argument
+        try:
+            # Use AST to parse the call and extract the third argument
+            tree = ast.parse(line.strip())
+            if isinstance(tree.body[0], ast.Expr) and 
isinstance(tree.body[0].value, ast.Call):
+                call = tree.body[0].value
+                if (isinstance(call.func, ast.Attribute) and
+                    isinstance(call.func.value, ast.Call) and
+                    call.func.attr == 'run_cell_magic' and
+                    len(call.args) >= 3):
+                    # Third argument is the code string
+                    code_node = call.args[2]
+                    if isinstance(code_node, ast.Constant):
+                        code = code_node.value
+                    elif isinstance(code_node, ast.Str):  # Python < 3.8
+                        code = code_node.s
+                    else:
+                        code = ast.literal_eval(code_node)
+                    # Add the extracted code as separate lines
+                    output_lines.append(code)
+                    i += 1
+                    continue
+        except:
+            # If AST parsing fails, try regex fallback
+            # Match: run_cell_magic('...', '...', 'CODE')
+            # This regex handles strings with escaped characters
+            match = 
re.search(r"run_cell_magic\([^,]+,\s*[^,]+,\s*('(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\")\)",
 line)
+            if match:
+                code_str = match.group(1)
+                try:
+                    code = ast.literal_eval(code_str)
+                    output_lines.append(code)
+                    i += 1
+                    continue
+                except:
+                    pass
+        # If all else fails, skip this line
+        i += 1
+        continue
+    elif 'get_ipython()' in line:
+        # Skip other get_ipython() calls
+        i += 1
+        continue
+    else:
+        output_lines.append(line)
+        i += 1
+
+content = ''.join(output_lines)
+
+# Remove IPython cell markers
+content = re.sub(r'# In\[\d+\]:\s*\n', '', content)
+
+with open(file_path, 'w') as f:
+    f.write(content)
+PYTHON_CLEANUP
+
+    # Validate Python syntax first
+    echo "  Validating Python syntax..."
+    if ! python3 -m py_compile "$PYTHON_FILE" >/dev/null 2>/dev/null; then
+        echo "  ✗ Python syntax validation failed"
+        FAILED_TESTS=$((FAILED_TESTS + 1))
+        echo ""
+        continue
+    fi
+
+    # Run the full Python script with timeout (600 seconds = 10 minutes)
+    echo "  Running Python script (600 second timeout)..."
+    cd "$EXAMPLES_DIR/.."
+
+    # Use timeout with progress reporting
+    START_TIME=$(date +%s)
+    if timeout 600 python3 "$PYTHON_FILE" | tee /tmp/notebook_output_$$.log; 
then
+        END_TIME=$(date +%s)
+        ELAPSED=$((END_TIME - START_TIME))
+        echo "  ✓ Test passed (completed in ${ELAPSED}s)"
+        PASSED_TESTS=$((PASSED_TESTS + 1))
+    else
+        EXIT_CODE=$?
+        END_TIME=$(date +%s)
+        ELAPSED=$((END_TIME - START_TIME))
+        if [ $EXIT_CODE -eq 124 ]; then
+            echo "  ✗ Test timed out (exceeded 600 seconds, ran for 
${ELAPSED}s)"
+            echo "  Last 20 lines of output:"
+            tail -20 /tmp/notebook_output_$$.log 2>/dev/null || echo "  (no 
output captured)"
+        else
+            echo "  ✗ Test failed with exit code $EXIT_CODE (ran for 
${ELAPSED}s)"
+            echo "  Last 20 lines of output:"
+            tail -20 /tmp/notebook_output_$$.log 2>/dev/null || echo "  (no 
output captured)"
+        fi
+        FAILED_TESTS=$((FAILED_TESTS + 1))
+    fi
+    rm -f /tmp/notebook_output_$$.log
+
+    echo ""
+done
+
+echo "========================================="
+echo "Test Summary"
+echo "========================================="
+echo "Passed: $PASSED_TESTS"
+echo "Failed: $FAILED_TESTS"
+echo "Total:  $((PASSED_TESTS + FAILED_TESTS))"
+echo "========================================="
+
+if [ $FAILED_TESTS -gt 0 ]; then
+    echo "Some tests failed. Exiting with error code 1."
+    exit 1
+else
+    echo "All tests passed!"
+    exit 0
+fi
diff --git a/docker/zeppelin/conf/interpreter.json 
b/docker/zeppelin/conf/interpreter.json
index 41ff251b16..f82f3e67ca 100644
--- a/docker/zeppelin/conf/interpreter.json
+++ b/docker/zeppelin/conf/interpreter.json
@@ -1638,11 +1638,11 @@
       ],
       "dependencies": [
         {
-          "groupArtifactVersion": 
"/opt/spark/jars/sedona-spark-shaded-3.5_2.12-1.7.1.jar",
+          "groupArtifactVersion": 
"/opt/spark/jars/sedona-spark-shaded-4.0_2.13-1.8.0.jar",
           "local": false
         },
         {
-          "groupArtifactVersion": 
"/opt/spark/jars/geotools-wrapper-1.7.1-28.5.jar",
+          "groupArtifactVersion": 
"/opt/spark/jars/geotools-wrapper-1.8.0-33.1.jar",
           "local": false
         }
       ],
diff --git a/docs/usecases/ApacheSedonaCore.ipynb 
b/docs/usecases/ApacheSedonaCore.ipynb
index 50270af244..77d4ef45b6 100644
--- a/docs/usecases/ApacheSedonaCore.ipynb
+++ b/docs/usecases/ApacheSedonaCore.ipynb
@@ -53,7 +53,7 @@
     "    SedonaContext.builder()\n",
     "    .config(\n",
     "        \"spark.jars.packages\",\n",
-    "        \"uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4\",\n",
+    "        \"uk.co.gresearch.spark:spark-extension_2.13:2.14.2-4.0\",\n",
     "    )\n",
     "    .master(\"spark://localhost:7077\")\n",
     "    .getOrCreate()\n",
diff --git a/docs/usecases/ApacheSedonaRaster.ipynb 
b/docs/usecases/ApacheSedonaRaster.ipynb
index 007b3eb479..eff186cf09 100644
--- a/docs/usecases/ApacheSedonaRaster.ipynb
+++ b/docs/usecases/ApacheSedonaRaster.ipynb
@@ -55,7 +55,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": null,
    "id": "e3495923-7fb4-4a6e-b62e-a4eeb9c2b306",
    "metadata": {
     "tags": []
@@ -111,7 +111,7 @@
     "    SedonaContext.builder()\n",
     "    .config(\n",
     "        \"spark.jars.packages\",\n",
-    "        \"uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4\",\n",
+    "        \"uk.co.gresearch.spark:spark-extension_2.13:2.14.2-4.0\",\n",
     "    )\n",
     "    .master(\"spark://localhost:7077\")\n",
     "    .getOrCreate()\n",
diff --git a/docs/usecases/ApacheSedonaSQL.ipynb 
b/docs/usecases/ApacheSedonaSQL.ipynb
index f835e0afc8..108b39ca2b 100644
--- a/docs/usecases/ApacheSedonaSQL.ipynb
+++ b/docs/usecases/ApacheSedonaSQL.ipynb
@@ -137,7 +137,7 @@
     "    SedonaContext.builder()\n",
     "    .config(\n",
     "        \"spark.jars.packages\",\n",
-    "        \"uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4\",\n",
+    "        \"uk.co.gresearch.spark:spark-extension_2.13:2.14.2-4.0\",\n",
     "    )\n",
     "    .master(\"spark://localhost:7077\")\n",
     "    .getOrCreate()\n",
diff --git a/docs/usecases/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb 
b/docs/usecases/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb
index 464bd481de..6e157bebbf 100644
--- a/docs/usecases/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb
+++ b/docs/usecases/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb
@@ -56,7 +56,7 @@
     "    SedonaContext.builder()\n",
     "    .config(\n",
     "        \"spark.jars.packages\",\n",
-    "        \"uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4\",\n",
+    "        \"uk.co.gresearch.spark:spark-extension_2.13:2.14.2-4.0\",\n",
     "    )\n",
     "    .master(\"spark://localhost:7077\")\n",
     "    .getOrCreate()\n",
diff --git a/docs/usecases/Sedona_OvertureMaps_GeoParquet.ipynb 
b/docs/usecases/Sedona_OvertureMaps_GeoParquet.ipynb
index d0efaffe20..e6e035471f 100644
--- a/docs/usecases/Sedona_OvertureMaps_GeoParquet.ipynb
+++ b/docs/usecases/Sedona_OvertureMaps_GeoParquet.ipynb
@@ -113,7 +113,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "id": "08c71acb",
    "metadata": {
     "tags": []
@@ -173,7 +173,11 @@
     "    SedonaContext.builder()\n",
     "    .config(\n",
     "        \"spark.jars.packages\",\n",
-    "        \"uk.co.gresearch.spark:spark-extension_2.12:2.11.0-3.4\",\n",
+    "        \"uk.co.gresearch.spark:spark-extension_2.13:2.14.2-4.0\",\n",
+    "    )\n",
+    "    .config(\n",
+    "        \"spark.hadoop.fs.s3a.aws.credentials.provider\",\n",
+    "        \"org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider\",\n",
     "    )\n",
     "    .master(\"spark://localhost:7077\")\n",
     "    .getOrCreate()\n",

Reply via email to