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",