diff --git a/docs/additional-functionality/advanced_configs.md b/docs/additional-functionality/advanced_configs.md index 883aab24cdb..0251cacb34c 100644 --- a/docs/additional-functionality/advanced_configs.md +++ b/docs/additional-functionality/advanced_configs.md @@ -48,7 +48,7 @@ Name | Description | Default Value | Applicable at spark.rapids.python.memory.gpu.pooling.enabled|Should RMM in Python workers act as a pooling allocator for GPU memory, or should it just pass through to CUDA memory allocation directly. When not specified, It will honor the value of config 'spark.rapids.memory.gpu.pooling.enabled'|None|Runtime spark.rapids.shuffle.enabled|Enable or disable the RAPIDS Shuffle Manager at runtime. The [RAPIDS Shuffle Manager](https://docs.nvidia.com/spark-rapids/user-guide/latest/additional-functionality/rapids-shuffle.html) must already be configured. When set to `false`, the built-in Spark shuffle will be used. |true|Runtime spark.rapids.shuffle.mode|RAPIDS Shuffle Manager mode. "MULTITHREADED": shuffle file writes and reads are parallelized using a thread pool. "UCX": (requires UCX installation) uses accelerated transports for transferring shuffle blocks. "CACHE_ONLY": use when running a single executor, for short-circuit cached shuffle (for testing purposes).|MULTITHREADED|Startup -spark.rapids.shuffle.multiThreaded.maxBytesInFlight|The size limit, in bytes, that the RAPIDS shuffle manager configured in "MULTITHREADED" mode will allow to be deserialized concurrently per task. This is also the maximum amount of memory that will be used per task. This should be set larger than Spark's default maxBytesInFlight (48MB). The larger this setting is, the more compressed shuffle chunks are processed concurrently. In practice, care needs to be taken to not go over the amount of off-heap memory that Netty has available. See https://github.com/NVIDIA/spark-rapids/issues/9153.|134217728|Startup +spark.rapids.shuffle.multiThreaded.maxBytesInFlight|The size limit, in bytes, that the RAPIDS shuffle manager configured in "MULTITHREADED" mode will allow to be serialized or deserialized concurrently per task. This is also the maximum amount of memory that will be used per task. This should be set larger than Spark's default maxBytesInFlight (48MB). The larger this setting is, the more compressed shuffle chunks are processed concurrently. In practice, care needs to be taken to not go over the amount of off-heap memory that Netty has available. See https://github.com/NVIDIA/spark-rapids/issues/9153.|134217728|Startup spark.rapids.shuffle.multiThreaded.reader.threads|The number of threads to use for reading shuffle blocks per executor in the RAPIDS shuffle manager configured in "MULTITHREADED" mode. There are two special values: 0 = feature is disabled, falls back to Spark built-in shuffle reader; 1 = our implementation of Spark's built-in shuffle reader with extra metrics.|20|Startup spark.rapids.shuffle.multiThreaded.writer.threads|The number of threads to use for writing shuffle blocks per executor in the RAPIDS shuffle manager configured in "MULTITHREADED" mode. There are two special values: 0 = feature is disabled, falls back to Spark built-in shuffle writer; 1 = our implementation of Spark's built-in shuffle writer with extra metrics.|20|Startup spark.rapids.shuffle.transport.earlyStart|Enable early connection establishment for RAPIDS Shuffle|true|Startup @@ -337,6 +337,7 @@ Name | SQL Function(s) | Description | Default Value | Notes spark.rapids.sql.expression.SparkPartitionID|`spark_partition_id`|Returns the current partition id|true|None| spark.rapids.sql.expression.SpecifiedWindowFrame| |Specification of the width of the group (or "frame") of input rows around which a window function is evaluated|true|None| spark.rapids.sql.expression.Sqrt|`sqrt`|Square root|true|None| +spark.rapids.sql.expression.Stack|`stack`|Separates expr1, ..., exprk into n rows.|true|None| spark.rapids.sql.expression.StartsWith| |Starts with|true|None| spark.rapids.sql.expression.StringInstr|`instr`|Instr string operator|true|None| spark.rapids.sql.expression.StringLPad|`lpad`|Pad a string on the left|true|None| @@ -350,6 +351,7 @@ Name | SQL Function(s) | Description | Default Value | Notes spark.rapids.sql.expression.StringTrim|`trim`|StringTrim operator|true|None| spark.rapids.sql.expression.StringTrimLeft|`ltrim`|StringTrimLeft operator|true|None| spark.rapids.sql.expression.StringTrimRight|`rtrim`|StringTrimRight operator|true|None| +spark.rapids.sql.expression.StructsToJson|`to_json`|Converts structs to JSON text format|false|This is disabled by default because to_json support is experimental. See compatibility guide for more information.| spark.rapids.sql.expression.Substring|`substr`, `substring`|Substring operator|true|None| spark.rapids.sql.expression.SubstringIndex|`substring_index`|substring_index operator|true|None| spark.rapids.sql.expression.Subtract|`-`|Subtraction|true|None| @@ -383,6 +385,7 @@ Name | SQL Function(s) | Description | Default Value | Notes spark.rapids.sql.expression.Last|`last`, `last_value`|last aggregate operator|true|None| spark.rapids.sql.expression.Max|`max`|Max aggregate operator|true|None| spark.rapids.sql.expression.Min|`min`|Min aggregate operator|true|None| +spark.rapids.sql.expression.Percentile|`percentile`|Aggregation computing exact percentile|true|None| spark.rapids.sql.expression.PivotFirst| |PivotFirst operator|true|None| spark.rapids.sql.expression.StddevPop|`stddev_pop`|Aggregation computing population standard deviation|true|None| spark.rapids.sql.expression.StddevSamp|`stddev_samp`, `std`, `stddev`|Aggregation computing sample standard deviation|true|None| diff --git a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_no_rdma b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_no_rdma index 4be0562123a..adf28f5fea2 100644 --- a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_no_rdma +++ b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_no_rdma @@ -17,23 +17,26 @@ # # The parameters are: # - CUDA_VER: 11.8.0 by default -# - UCX_VER and UCX_CUDA_VER: these are used to pick a package matching a specific UCX version and -# CUDA runtime from the UCX github repo. -# See: https://github.com/openucx/ucx/releases/ +# - UCX_VER, UCX_CUDA_VER, and UCX_ARCH: +# Used to pick a package matching a specific UCX version and +# CUDA runtime from the UCX github repo. +# See: https://github.com/openucx/ucx/releases/ # - ROCKY_VER: Rocky Linux OS version ARG CUDA_VER=11.8.0 -ARG UCX_VER=1.14.0 +ARG UCX_VER=1.15.0 ARG UCX_CUDA_VER=11 +ARG UCX_ARCH=x86_64 ARG ROCKY_VER=8 FROM nvidia/cuda:${CUDA_VER}-runtime-rockylinux${ROCKY_VER} ARG UCX_VER ARG UCX_CUDA_VER +ARG UCX_ARCH RUN yum update -y && yum install -y wget bzip2 numactl-libs libgomp RUN ls /usr/lib RUN mkdir /tmp/ucx_install && cd /tmp/ucx_install && \ - wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-centos8-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ + wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-centos8-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ tar -xvf *.bz2 && \ rpm -i ucx-$UCX_VER*.rpm && \ rpm -i ucx-cuda-$UCX_VER*.rpm --nodeps && \ diff --git a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_rdma b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_rdma index c5055e61ec6..9083e1561b5 100644 --- a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_rdma +++ b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.rocky_rdma @@ -17,22 +17,25 @@ # # The parameters are: # - CUDA_VER: 11.8.0 by default -# - UCX_VER and UCX_CUDA_VER: these are used to pick a package matching a specific UCX version and -# CUDA runtime from the UCX github repo. -# See: https://github.com/openucx/ucx/releases/ +# - UCX_VER, UCX_CUDA_VER, and UCX_ARCH: +# Used to pick a package matching a specific UCX version and +# CUDA runtime from the UCX github repo. +# See: https://github.com/openucx/ucx/releases/ # - ROCKY_VER: Rocky Linux OS version ARG CUDA_VER=11.8.0 -ARG UCX_VER=1.14.0 +ARG UCX_VER=1.15.0 ARG UCX_CUDA_VER=11 +ARG UCX_ARCH=x86_64 ARG ROCKY_VER=8 FROM nvidia/cuda:${CUDA_VER}-runtime-rockylinux${ROCKY_VER} ARG UCX_VER ARG UCX_CUDA_VER +ARG UCX_ARCH RUN yum update -y && yum install -y wget bzip2 rdma-core numactl-libs libgomp libibverbs librdmacm RUN mkdir /tmp/ucx_install && cd /tmp/ucx_install && \ - wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-centos8-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ + wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-centos8-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ tar -xvf *.bz2 && \ rpm -i ucx-$UCX_VER*.rpm && \ rpm -i ucx-cuda-$UCX_VER*.rpm --nodeps && \ diff --git a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_no_rdma b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_no_rdma index 8d6fc1671bc..e0318a0de60 100644 --- a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_no_rdma +++ b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_no_rdma @@ -17,21 +17,24 @@ # # The parameters are: # - CUDA_VER: 11.8.0 by default -# - UCX_VER and UCX_CUDA_VER: these are used to pick a package matching a specific UCX version and -# CUDA runtime from the UCX github repo. -# See: https://github.com/openucx/ucx/releases/ +# - UCX_VER, UCX_CUDA_VER, and UCX_ARCH: +# Used to pick a package matching a specific UCX version and +# CUDA runtime from the UCX github repo. +# See: https://github.com/openucx/ucx/releases/ # - UBUNTU_VER: 20.04 by default # ARG CUDA_VER=11.8.0 -ARG UCX_VER=1.14.0 +ARG UCX_VER=1.15.0 ARG UCX_CUDA_VER=11 +ARG UCX_ARCH=x86_64 ARG UBUNTU_VER=20.04 FROM nvidia/cuda:${CUDA_VER}-runtime-ubuntu${UBUNTU_VER} ARG UCX_VER ARG UCX_CUDA_VER ARG UBUNTU_VER +ARG UCX_ARCH RUN apt-get update && apt-get install -y gnupg2 # https://forums.developer.nvidia.com/t/notice-cuda-linux-repository-key-rotation/212771 @@ -41,7 +44,7 @@ RUN CUDA_UBUNTU_VER=`echo "$UBUNTU_VER"| sed -s 's/\.//'` && \ RUN apt update RUN apt-get install -y wget RUN mkdir /tmp/ucx_install && cd /tmp/ucx_install && \ - wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ - tar -xvf ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ + wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ + tar -xvf ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ apt install -y /tmp/ucx_install/*.deb && \ rm -rf /tmp/ucx_install diff --git a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_rdma b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_rdma index 9980da80c15..55281fc4b1b 100644 --- a/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_rdma +++ b/docs/additional-functionality/shuffle-docker-examples/Dockerfile.ubuntu_rdma @@ -20,9 +20,10 @@ # - RDMA_CORE_VERSION: Set to 32.1 to match the rdma-core line in the latest # released MLNX_OFED 5.x driver # - CUDA_VER: 11.8.0 by default -# - UCX_VER and UCX_CUDA_VER: these are used to pick a package matching a specific UCX version and -# CUDA runtime from the UCX github repo. -# See: https://github.com/openucx/ucx/releases/ +# - UCX_VER, UCX_CUDA_VER, and UCX_ARCH: +# Used to pick a package matching a specific UCX version and +# CUDA runtime from the UCX github repo. +# See: https://github.com/openucx/ucx/releases/ # - UBUNTU_VER: 20.04 by default # # The Dockerfile first fetches and builds `rdma-core` to satisfy requirements for @@ -34,8 +35,9 @@ ARG RDMA_CORE_VERSION=32.1 ARG CUDA_VER=11.8.0 -ARG UCX_VER=1.14.0 +ARG UCX_VER=1.15.0 ARG UCX_CUDA_VER=11 +ARG UCX_ARCH=x86_64 ARG UBUNTU_VER=20.04 # Throw away image to build rdma_core @@ -43,6 +45,7 @@ FROM ubuntu:${UBUNTU_VER} as rdma_core ARG RDMA_CORE_VERSION ARG UBUNTU_VER ARG CUDA_VER +ARG UCX_ARCH RUN apt-get update && apt-get install -y gnupg2 # https://forums.developer.nvidia.com/t/notice-cuda-linux-repository-key-rotation/212771 @@ -61,6 +64,7 @@ RUN tar -xvf *.tar.gz && cd rdma-core*/ && dpkg-buildpackage -b -d FROM nvidia/cuda:${CUDA_VER}-runtime-ubuntu${UBUNTU_VER} ARG UCX_VER ARG UCX_CUDA_VER +ARG UCX_ARCH ARG UBUNTU_VER RUN mkdir /tmp/ucx_install @@ -70,7 +74,7 @@ COPY --from=rdma_core /*.deb /tmp/ucx_install/ RUN apt update RUN apt-get install -y wget RUN cd /tmp/ucx_install && \ - wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ - tar -xvf ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER.tar.bz2 && \ + wget https://github.com/openucx/ucx/releases/download/v$UCX_VER/ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ + tar -xvf ucx-$UCX_VER-ubuntu$UBUNTU_VER-mofed5-cuda$UCX_CUDA_VER-$UCX_ARCH.tar.bz2 && \ apt install -y /tmp/ucx_install/*.deb && \ rm -rf /tmp/ucx_install diff --git a/docs/archive.md b/docs/archive.md index 90f0aa3bb16..83108f7e200 100644 --- a/docs/archive.md +++ b/docs/archive.md @@ -5,6 +5,86 @@ nav_order: 15 --- Below are archived releases for RAPIDS Accelerator for Apache Spark. +## Release v23.10.0 +### Hardware Requirements: + +The plugin is tested on the following architectures: + + GPU Models: NVIDIA P100, V100, T4, A10/A100, L4 and H100 GPUs + +### Software Requirements: + + OS: Ubuntu 20.04, Ubuntu 22.04, CentOS 7, or Rocky Linux 8 + + NVIDIA Driver*: R470+ + + Runtime: + Scala 2.12 + Python, Java Virtual Machine (JVM) compatible with your spark-version. + + * Check the Spark documentation for Python and Java version compatibility with your specific + Spark version. For instance, visit `https://spark.apache.org/docs/3.4.1` for Spark 3.4.1. + Please be aware that we do not currently support Spark builds with Scala 2.13. + + Supported Spark versions: + Apache Spark 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4 + Apache Spark 3.3.0, 3.3.1, 3.3.2, 3.3.3 + Apache Spark 3.4.0, 3.4.1 + Apache Spark 3.5.0 + + Supported Databricks runtime versions for Azure and AWS: + Databricks 10.4 ML LTS (GPU, Scala 2.12, Spark 3.2.1) + Databricks 11.3 ML LTS (GPU, Scala 2.12, Spark 3.3.0) + Databricks 12.2 ML LTS (GPU, Scala 2.12, Spark 3.3.2) + + Supported Dataproc versions: + GCP Dataproc 2.0 + GCP Dataproc 2.1 + +*Some hardware may have a minimum driver version greater than R470. Check the GPU spec sheet +for your hardware's minimum driver version. + +*For Cloudera and EMR support, please refer to the +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. + +#### RAPIDS Accelerator's Support Policy for Apache Spark +The RAPIDS Accelerator maintains support for Apache Spark versions available for download from [Apache Spark](https://spark.apache.org/downloads.html) + +### Download v23.10.0 +* Download the [RAPIDS + Accelerator for Apache Spark 23.10.0 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar) + +This package is built against CUDA 11.8. It is tested on V100, T4, A10, A100, L4 and H100 GPUs with +CUDA 11.8 through CUDA 12.0. + +### Verify signature +* Download the [RAPIDS Accelerator for Apache Spark 23.10.0 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar) + and [RAPIDS Accelerator for Apache Spark 23.10.0 jars.asc](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar.asc) +* Download the [PUB_KEY](https://keys.openpgp.org/search?q=sw-spark@nvidia.com). +* Import the public key: `gpg --import PUB_KEY` +* Verify the signature: `gpg --verify rapids-4-spark_2.12-23.10.0.jar.asc rapids-4-spark_2.12-23.10.0.jar` + +The output of signature verify: + + gpg: Good signature from "NVIDIA Spark (For the signature of spark-rapids release jars) " + +### Release Notes +New functionality and performance improvements for this release include: +* Introduced support for Spark 3.5.0. +* Improved memory management for better control in YARN and K8s on CSP. +* Strengthened Parquet and ORC tests for enhanced stability and support. +* Reduce GPU out-of-memory (OOM) occurrences. +* Enhanced driver log with actionable insights. +* Qualification and Profiling tool: + * Enhanced user experience with the availability of the 'ascli' tool for qualification and + profiling across all platforms. + * The qualification tool now accommodates CPU-fallback transitions and broadens the speedup factor coverage. + * Extended diagnostic support for user tools to cover EMR, Databricks AWS, and Databricks Azure. + * Introduced support for cluster configuration recommendations in the profiling tool for supported platforms. + +For a detailed list of changes, please refer to the +[CHANGELOG](https://github.com/NVIDIA/spark-rapids/blob/main/CHANGELOG.md). + ## Release v23.08.2 ### Hardware Requirements: @@ -183,7 +263,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v23.06.0 * Download the [RAPIDS @@ -247,7 +327,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v23.04.1 * Download the [RAPIDS @@ -308,7 +388,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v23.02.0 * Download the [RAPIDS @@ -368,7 +448,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.12.0 * Download the [RAPIDS @@ -428,7 +508,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.10.0 * Download the [RAPIDS @@ -488,7 +568,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.08.0 * Download the [RAPIDS @@ -549,7 +629,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.06.0 * Download the [RAPIDS @@ -610,7 +690,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.04.0 * Download the [RAPIDS @@ -671,7 +751,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v22.02.0 * Download the [RAPIDS @@ -737,7 +817,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.12.0 * Download the [RAPIDS @@ -804,7 +884,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.10.0 * Download the [RAPIDS @@ -863,7 +943,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.08.0 * Download the [RAPIDS @@ -919,7 +999,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.06.2 * Download the [RAPIDS @@ -962,7 +1042,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.06.1 * Download the [RAPIDS @@ -1009,7 +1089,7 @@ Software Requirements: for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the -[Distributions](./FAQ.md#which-distributions-are-supported) section of the FAQ. +[Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. ### Download v21.06.0 * Download the [RAPIDS @@ -1171,8 +1251,7 @@ New functionality for the release includes This release includes additional performance improvements, including * RAPIDS Shuffle with UCX performance improvements -* Instructions on how to use [Alluxio caching](get-started/getting-started-alluxio.md) with Spark to - leverage caching. +* Instructions on how to use Alluxio caching with Spark to leverage caching. The release is supported on Apache Spark 3.0.0, 3.0.1, 3.0.2, 3.1.1, Databricks 7.3 ML LTS and Google Cloud Platform Dataproc 2.0. @@ -1273,9 +1352,9 @@ CPU threads v0.2 delivers up to 6x performance improvement over the previous rel Parquet file reads. The RAPIDS Accelerator introduces a beta feature that accelerates -[Spark shuffle for GPUs](get-started/getting-started-on-prem.md#enabling-rapids-shuffle-manager). Accelerated -shuffle makes use of high bandwidth transfers between GPUs (NVLink or p2p over PCIe) and leverages -RDMA (RoCE or Infiniband) for remote transfers. +[Spark shuffle for GPUs](https://docs.nvidia.com/spark-rapids/user-guide/latest/getting-started/on-premise.html#enabling-rapids-shuffle-manager). +Accelerated shuffle makes use of high bandwidth transfers between GPUs (NVLink or p2p over PCIe) and +leverages RDMA (RoCE or Infiniband) for remote transfers. The list of all supported operations is provided [here](configs.md#supported-gpu-operators-and-fine-tuning). diff --git a/docs/compatibility.md b/docs/compatibility.md index de4ee77496e..44c7497e6c5 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -65,8 +65,7 @@ conditions within the computation itself the result may not be the same each tim run. This is inherent in how the plugin speeds up the calculations and cannot be "fixed." If a query joins on a floating point value, which is not wise to do anyways, and the value is the result of a floating point aggregation then the join may fail to work properly with the plugin but would have -worked with plain Spark. Starting from 22.06 this is behavior is enabled by default but can be disabled with -the config +worked with plain Spark. This is behavior is enabled by default but can be disabled with the config [`spark.rapids.sql.variableFloatAgg.enabled`](additional-functionality/advanced_configs.md#sql.variableFloatAgg.enabled). ### `0.0` vs `-0.0` @@ -83,6 +82,33 @@ after Spark 3.1.0. We do not disable operations that produce different results due to `-0.0` in the data because it is considered to be a rare occurrence. +### `NaN` vs `NaN` + +Apache Spark does not have a consistent way to handle `NaN` comparison. Sometimes, all `NaN` are +considered as one unique value while other times they can be treated as different. The outcome of +`NaN` comparison can differ in various operations and also changed between Spark versions. +The RAPIDS Accelerator tries to match its output with Apache Spark except for a few operation(s) listed below: + - `IN` SQL expression: `NaN` can be treated as different values in Spark 3.1.2 and + prior versions, see [SPARK-36792](https://issues.apache.org/jira/browse/SPARK-36792) for more details. +The RAPIDS Accelerator compares `NaN` values as equal for this operation which matches +the behavior of Apache Spark 3.1.3 and later versions. + + +## Decimal Support + +Apache Spark supports decimal values with a precision up to 38. This equates to 128-bits. +When processing the data, in most cases, it is temporarily converted to Java's `BigDecimal` type +which allows for effectively unlimited precision. Overflows will be detected whenever the +`BigDecimal` value is converted back into the Spark decimal type. + +The RAPIDS Accelerator does not implement a GPU equivalent of `BigDecimal`, but it does implement +computation on 256-bit values to allow the detection of overflows. The points at which overflows +are detected may differ between the CPU and GPU. Spark gives no guarantees that overflows are +detected if an intermediate value could overflow the original decimal type during computation +but the final value does not (e.g.: a sum of values with many large positive values followed by +many large negative values). Spark injects overflow detection at various points during aggregation, +and these points can fluctuate depending on cluster shape and number of shuffle partitions. + ## Unicode Spark delegates Unicode operations to the underlying JVM. Each version of Java complies with a @@ -106,6 +132,10 @@ it and they should be avoided. Escaped quote characters `'\"'` are not supported well as described by this [issue](https://github.com/NVIDIA/spark-rapids/issues/129). +The GPU accelerated CSV parser does not replace invalid UTF-8 characters with the Unicode +replacement character �. Instead it just passes them through as described in this +[issue](https://github.com/NVIDIA/spark-rapids/issues/9560). + ### CSV Dates Only a limited set of formats are supported when parsing dates. @@ -246,23 +276,22 @@ E at org.apache.spark.sql.execution.datasources.orc.OrcUtils$.createAggIn The Spark community is planning to work on a runtime fallback to read from actual rows when ORC file-statistics are missing (see [SPARK-34960 discussion](https://issues.apache.org/jira/browse/SPARK-34960)). -**Limitations With RAPIDS** - -RAPIDS does not support whole file statistics in ORC file in releases prior to release 22.06. - *Writing ORC Files* -If you are using release prior to release 22.06 where CUDF does not support writing file statistics, then the ORC files -written by the GPU are incompatible with the optimization causing an ORC read-job to fail as described above. -In order to prevent job failures in releases prior to release 22.06, `spark.sql.orc.aggregatePushdown` should be disabled -while reading ORC files that were written by the GPU. +There are issues writing ORC files with dates or timestamps that fall within the lost days during +the switch from the Julian to Gregorian calendar, i.e.: between October 3rd, 1582 and October 15th, +1582. Dates or timestamps that fall within the range of lost days will not always be written +properly by the GPU to the ORC file. The values read by the CPU and the GPU may differ with the +CPU often rounding the day up to October 15th, 1582 whereas the GPU does not. + +Note that the CPU rounds up dates or timestamps in the lost days range to October 15th, 1582 +_before_ writing to the ORC file. If the CPU writes these problematic dates or timestamps to an +ORC file, they will be read properly by both the CPU and the GPU. *Reading ORC Files* -To take advantage of the aggregate optimization, the plugin falls back to the CPU as it is a meta data only query. -As long as the ORC file has valid statistics (written by the CPU), then the pushing down aggregates to the ORC layer -should be successful. -Otherwise, reading an ORC file written by the GPU requires `aggregatePushdown` to be disabled. +To take advantage of the aggregate query optimization, where only the ORC metadata is read to +satisfy the query, the ORC read falls back to the CPU as it is a metadata-only query. ## Parquet @@ -315,25 +344,50 @@ In the current version, nested types (array, struct, and map types) are not yet This particular function supports to output a map or struct type with limited functionalities. -For struct output type, the function only supports struct of struct, array, string and int types. The output is incompatible if duplicated json key names are present in the input strings. For schemas that include IntegerType, -if arbitrarily large numbers are specified in the JSON strings, the GPU implementation will cast the numbers to -IntegerType, whereas CPU Spark will return null. +The `from_json` function is disabled by default because it is experimental and has some known incompatibilities +with Spark, and can be enabled by setting `spark.rapids.sql.expression.JsonToStructs=true`. + +Dates are partially supported but there are some known issues: + +- Only the default `dateFormat` of `yyyy-MM-dd` is supported. The query will fall back to CPU if any other format + is specified ([#9667](https://github.com/NVIDIA/spark-rapids/issues/9667)) +- Strings containing integers with more than four digits will be + parsed as null ([#9664](https://github.com/NVIDIA/spark-rapids/issues/9664)) whereas Spark versions prior to 3.4 + will parse these numbers as number of days since the epoch, and in Spark 3.4 and later, an exception will be thrown. + +Timestamps are partially supported but there are some known issues: + +- Only the default `timestampFormat` of `yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]` is supported. The query will fall back to CPU if any other format + is specified ([#9273](https://github.com/NVIDIA/spark-rapids/issues/9723)) +- Strings containing integers with more than four digits will be + parsed as null ([#9664](https://github.com/NVIDIA/spark-rapids/issues/9664)) whereas Spark versions prior to 3.4 + will parse these numbers as number of days since the epoch, and in Spark 3.4 and later, an exception will be thrown. +- Strings containing special date constant values such as `now` and `today` will parse as null ([#9724](https://github.com/NVIDIA/spark-rapids/issues/9724)), + which differs from the behavior in Spark 3.1.x + +When reading numeric values, the GPU implementation always supports leading zeros regardless of the setting +for the JSON option `allowNumericLeadingZeros` ([#9588](https://github.com/NVIDIA/spark-rapids/issues/9588)). + +For struct output type, the function only supports struct of struct, array, string, integral, floating-point, and +decimal types. The output is incompatible if duplicated json key names are present in the input strings. For schemas +that include IntegerType, if arbitrarily large numbers are specified in the JSON strings, the GPU implementation will +cast the numbers to IntegerType, whereas CPU Spark will return null. In particular, the output map is not resulted from a regular JSON parsing but instead it will just contain plain text of key-value pairs extracted directly from the input JSON string. Due to such limitations, the input JSON map type schema must be `MAP` and nothing else. Furthermore, there is no validation, no error tolerance, no data conversion as well as string formatting is performed. This may lead to some minor differences in the output if compared to the result of Spark CPU's `from_json`, such as: * Floating point numbers in the input JSON string such as `1.2000` will not be reformatted to `1.2`. Instead, the output will be the same as the input. - * If the input JSON is given as multiple rows, any row containing invalid JSON format will lead to an application crash. On the other hand, Spark CPU version just produces nulls for the invalid rows, as shown below: - ``` -scala> val df = Seq("{}", "BAD", "{\"A\": 100}").toDF -df: org.apache.spark.sql.DataFrame = [value: string] -scala> df.selectExpr("from_json(value, 'MAP')").show() -+----------+ -| entries| -+----------+ -| {}| -| null| -|{A -> 100}| -+----------+ -``` + * If the input JSON is given as multiple rows, any row containing invalid JSON format will be parsed as an empty + struct instead of a null value ([#9592](https://github.com/NVIDIA/spark-rapids/issues/9592)). + +### `to_json` function + +The `to_json` function is disabled by default because it is experimental and has some known incompatibilities +with Spark, and can be enabled by setting `spark.rapids.sql.expression.StructsToJson=true`. + +Known issues are: + +- There can be rounding differences when formatting floating-point numbers as strings. For example, Spark may + produce `-4.1243574E26` but the GPU may produce `-4.124357351E26`. +- Not all JSON options are respected ### JSON Floating Point @@ -640,8 +694,7 @@ leads to restrictions: * Float values cannot be larger than `1e18` or smaller than `-1e18` after conversion. * The results produced by GPU slightly differ from the default results of Spark. -Starting from 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or -later, set +This configuration is enabled by default. To disable this operation on the GPU set [`spark.rapids.sql.castFloatToDecimal.enabled`](additional-functionality/advanced_configs.md#sql.castFloatToDecimal.enabled) to `false` ### Float to Integral Types @@ -652,12 +705,10 @@ Spark 3.1.0 the MIN and MAX values were floating-point values such as `Int.MaxVa starting with 3.1.0 these are now integral types such as `Int.MaxValue` so this has slightly affected the valid range of values and now differs slightly from the behavior on GPU in some cases. -Starting from 22.06 this conf is enabled, to disable this operation on the GPU when using Spark 3.1.0 or later, set +This configuration is enabled by default. To disable this operation on the GPU set [`spark.rapids.sql.castFloatToIntegralTypes.enabled`](additional-functionality/advanced_configs.md#sql.castFloatToIntegralTypes.enabled) to `false`. -This configuration setting is ignored when using Spark versions prior to 3.1.0. - ### Float to String The GPU will use different precision than Java's toString method when converting floating-point data @@ -668,7 +719,7 @@ The `format_number` function will retain 10 digits of precision for the GPU when point number, but Spark will retain up to 17 digits of precision, i.e. `format_number(1234567890.1234567890, 5)` will return `1,234,567,890.00000` on the GPU and `1,234,567,890.12346` on the CPU. To enable this on the GPU, set [`spark.rapids.sql.formatNumberFloat.enabled`](additional-functionality/advanced_configs.md#sql.formatNumberFloat.enabled) to `true`. -Starting from 22.06 this conf is enabled by default, to disable this operation on the GPU, set +This configuration is enabled by default. To disable this operation on the GPU set [`spark.rapids.sql.castFloatToString.enabled`](additional-functionality/advanced_configs.md#sql.castFloatToString.enabled) to `false`. ### String to Float @@ -682,7 +733,7 @@ default behavior in Apache Spark is to return `+Infinity` and `-Infinity`, respe Also, the GPU does not support casting from strings containing hex values. -Starting from 22.06 this conf is enabled by default, to enable this operation on the GPU, set +This configuration is enabled by default. To disable this operation on the GPU set [`spark.rapids.sql.castStringToFloat.enabled`](additional-functionality/advanced_configs.md#sql.castStringToFloat.enabled) to `false`. ### String to Date diff --git a/docs/configs.md b/docs/configs.md index 9be096e8c7f..9b7234e13b8 100644 --- a/docs/configs.md +++ b/docs/configs.md @@ -10,7 +10,7 @@ The following is the list of options that `rapids-plugin-4-spark` supports. On startup use: `--conf [conf key]=[conf value]`. For example: ``` -${SPARK_HOME}/bin/spark-shell --jars rapids-4-spark_2.12-23.10.0-cuda11.jar \ +${SPARK_HOME}/bin/spark-shell --jars rapids-4-spark_2.12-23.12.0-cuda11.jar \ --conf spark.plugins=com.nvidia.spark.SQLPlugin \ --conf spark.rapids.sql.concurrentGpuTasks=2 ``` diff --git a/docs/dev/README.md b/docs/dev/README.md index 5af0d309c3c..edd6c2313f5 100644 --- a/docs/dev/README.md +++ b/docs/dev/README.md @@ -13,6 +13,7 @@ following topics: * [How Spark Executes the Physical Plan](#how-spark-executes-the-physical-plan) * [How the Plugin Works](#how-the-rapids-plugin-works) * [Plugin Replacement Rules](#plugin-replacement-rules) + * [Working with Data Sources](#working-with-data-sources) * [Guidelines for Replacing Catalyst Executors and Expressions](#guidelines-for-replacing-catalyst-executors-and-expressions) * [Setting Up the Class](#setting-up-the-class) * [Expressions](#expressions) @@ -131,6 +132,11 @@ executor, expression, etc.), and applying the rule that matches. See the There is a separate guide for working with [Adaptive Query Execution](adaptive-query.md). +### Working with Data Sources + +The plugin supports v1 and v2 data sources for file formats such as CSV, +Orc, JSON, and Parquet. See the [data source guide](data-sources.md) for more information. + ## Guidelines for Replacing Catalyst Executors and Expressions Most development work in the plugin involves translating various Catalyst executor and expression nodes into new nodes that execute on the GPU. This diff --git a/docs/dev/data-sources.md b/docs/dev/data-sources.md new file mode 100644 index 00000000000..79bf8b292bd --- /dev/null +++ b/docs/dev/data-sources.md @@ -0,0 +1,68 @@ +--- +layout: page +title: Working with Spark Data Sources +nav_order: 2 +parent: Developer Overview +--- + +# Working with Spark Data Sources + +## Data Source API Versions + +Spark has two major versions of its data source APIs, simply known as "v1" and "v2". There is a configuration +property `spark.sql.sources.useV1SourceList` which determines which API version is used when reading from data +sources such as CSV, Orc, and Parquet. The default value for this configuration option (as of Spark 3.4.0) +is `"avro,csv,json,kafka,orc,parquet,text"`, meaning that all of these data sources fall back to v1 by default. + +When using Spark SQL (including the DataFrame API), the representation of a read in the physical plan will be +different depending on the API version being used, and in the plugin we therefore have different code paths +for tagging and replacing these operations. + +## V1 API + +In the v1 API, a read from a file-based data source is represented by a `FileSourceScanExec`, which wraps +a `HadoopFsRelation`. + +`HadoopFsRelation` is an important component in Apache Spark. It represents a relation based on data stored in the +Hadoop FileSystem. When we talk about the Hadoop FileSystem in this context, it encompasses various distributed +storage systems that are Hadoop-compatible, such as HDFS (Hadoop Distributed FileSystem), Amazon S3, and others. + +`HadoopFsRelation` is not tied to a specific file format. Instead, it relies on implementations of the `FileFormat` +interface to read and write data. + +This means that various file formats like CSV, Parquet, and ORC can have their implementations of the `FileFormat` +interface, and `HadoopFsRelation` will be able to work with any of them. + +When overriding `FileSourceScanExec` in the plugin, there are a number of different places where tagging code can be +placed, depending on the file format. We start in GpuOverrides with a map entry `GpuOverrides.exec[FileSourceScanExec]`, +and then the hierarchical flow is typically as follows, although it may vary between shim versions: + +``` +FileSourceScanExecMeta.tagPlanForGpu + ScanExecShims.tagGpuFileSourceScanExecSupport + GpuFileSourceScanExec.tagSupport +``` + +`GpuFileSourceScanExec.tagSupport` will inspect the `FileFormat` and then call into one of the following: + +- `GpuReadCSVFileFormat.tagSupport`, which calls `GpuCSVScan.tagSupport` +- `GpuReadOrcFileFormat.tagSupport`, which calls `GpuOrcScan.tagSupport` +- `GpuReadParquetFileFormat.tagSupport`, which calls `GpuParquetScan.tagSupport` + +The classes `GpuCSVScan`, `GpuParquetScan`, `GpuOrcScan`, and `GpuJsonScan` are also called +from the v2 API, so this is a good place to put code that is not specific to either API +version. These scan classes also call into `FileFormatChecks.tag`. + +## V2 API + +When using the v2 API, the physical plan will contain a `BatchScanExec`, which wraps a scan that implements +the `org.apache.spark.sql.connector.read.Scan` trait. The scan implementations include `CsvScan`, `ParquetScan`, +and `OrcScan`. These are the same scan implementations used in the v1 API, and the plugin tagging code can be +placed in one of the following methods: + +- `GpuCSVScan.tagSupport` +- `GpuOrcScan.tagSupport` +- `GpuParquetScan.tagSupport` + +When overriding v2 operators in the plugin, we can override both `BatchScanExec` and the individual scans, such +as `CsvScanExec`. diff --git a/docs/dev/shims.md b/docs/dev/shims.md index a15c6570fd6..cca778382b8 100644 --- a/docs/dev/shims.md +++ b/docs/dev/shims.md @@ -68,17 +68,17 @@ Using JarURLConnection URLs we create a Parallel World of the current version wi Spark 3.0.2's URLs: ```text -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/ -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/spark3xx-common/ -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/spark302/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/spark3xx-common/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/spark302/ ``` Spark 3.2.0's URLs : ```text -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/ -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/spark3xx-common/ -jar:file:/home/spark/rapids-4-spark_2.12-23.10.0.jar!/spark320/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/spark3xx-common/ +jar:file:/home/spark/rapids-4-spark_2.12-23.12.0.jar!/spark320/ ``` ### Late Inheritance in Public Classes @@ -114,17 +114,19 @@ that the classloader is [set up at load time](https://github.com/NVIDIA/spark-rapids/blob/main/sql-plugin/src/main/scala/com/nvidia/spark/SQLPlugin.scala#L29) before the DriverPlugin and ExecutorPlugin instances are called the `init` method on. -By making a visible class merely a wrapper of the real implementation, extending `scala.Proxy` where `self` is a lazy -val, we prevent classes from Parallel Worlds to be loaded before they can be, and are actually required. +By making a visible class merely a wrapper of the real implementation where the real implementation +is a `lazy val` we prevent classes from Parallel Worlds to be loaded before they can be, and are +actually required. + For examples see: -1. `abstract class ProxyRapidsShuffleInternalManagerBase` +1. `class ProxyRapidsShuffleInternalManagerBase` 2. `class ExclusiveModeGpuDiscoveryPlugin` Note that we currently have to manually code up the delegation methods to the tune of: ```Scala - def method(x: SomeThing) = self.method(x) + def method(x: SomeThing) = realImpl.method(x) ``` This could be automatically generated with a simple tool processing the `scalap` output or Scala macros at diff --git a/docs/dev/testing.md b/docs/dev/testing.md index 9d92ae4aacf..318d3d0584e 100644 --- a/docs/dev/testing.md +++ b/docs/dev/testing.md @@ -5,5 +5,5 @@ nav_order: 2 parent: Developer Overview --- An overview of testing can be found within the repository at: -* [Unit tests](https://github.com/NVIDIA/spark-rapids/tree/branch-23.10/tests#readme) -* [Integration testing](https://github.com/NVIDIA/spark-rapids/tree/branch-23.10/integration_tests#readme) +* [Unit tests](https://github.com/NVIDIA/spark-rapids/tree/branch-23.12/tests#readme) +* [Integration testing](https://github.com/NVIDIA/spark-rapids/tree/branch-23.12/integration_tests#readme) diff --git a/docs/download.md b/docs/download.md index 18d873765d3..e68af9c65ae 100644 --- a/docs/download.md +++ b/docs/download.md @@ -16,14 +16,14 @@ The RAPIDS Accelerator For Apache Spark requires each worker node in the cluster The RAPIDS Accelerator For Apache Spark consists of two jars: a plugin jar along with the RAPIDS cuDF jar, that is either preinstalled in the Spark classpath on all nodes or submitted with each job that uses the RAPIDS Accelerator For Apache Spark. See the [getting-started -guide](https://nvidia.github.io/spark-rapids/Getting-Started/) for more details. +guide](https://docs.nvidia.com/spark-rapids/user-guide/latest/getting-started/overview.html) for more details. -## Release v23.10.0 +## Release v23.12.0 ### Hardware Requirements: The plugin is tested on the following architectures: - GPU Models: NVIDIA P100, V100, T4, A10/A100, L4 and H100 GPUs + GPU Models: NVIDIA V100, T4, A10/A100, L4 and H100 GPUs ### Software Requirements: @@ -32,12 +32,11 @@ The plugin is tested on the following architectures: NVIDIA Driver*: R470+ Runtime: - Scala 2.12 + Scala 2.12, 2.13 Python, Java Virtual Machine (JVM) compatible with your spark-version. * Check the Spark documentation for Python and Java version compatibility with your specific - Spark version. For instance, visit `https://spark.apache.org/docs/3.4.1` for Spark 3.4.1. - Please be aware that we do not currently support Spark builds with Scala 2.13. + Spark version. For instance, visit `https://spark.apache.org/docs/3.4.1` for Spark 3.4.1. Supported Spark versions: Apache Spark 3.2.0, 3.2.1, 3.2.2, 3.2.3, 3.2.4 @@ -53,6 +52,9 @@ The plugin is tested on the following architectures: Supported Dataproc versions: GCP Dataproc 2.0 GCP Dataproc 2.1 + + Supported Dataproc Serverless versions: + Spark runtime 1.1 LTS *Some hardware may have a minimum driver version greater than R470. Check the GPU spec sheet for your hardware's minimum driver version. @@ -60,22 +62,28 @@ for your hardware's minimum driver version. *For Cloudera and EMR support, please refer to the [Distributions](https://docs.nvidia.com/spark-rapids/user-guide/latest/faq.html#which-distributions-are-supported) section of the FAQ. -#### RAPIDS Accelerator's Support Policy for Apache Spark +### RAPIDS Accelerator's Support Policy for Apache Spark The RAPIDS Accelerator maintains support for Apache Spark versions available for download from [Apache Spark](https://spark.apache.org/downloads.html) -### Download v23.10.0 -* Download the [RAPIDS - Accelerator for Apache Spark 23.10.0 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar) +### Download RAPIDS Accelerator for Apache Spark v23.12.0 +- **Scala 2.12:** + - [RAPIDS Accelerator for Apache Spark 23.12.0 - Scala 2.12 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.12.0/rapids-4-spark_2.12-23.12.0.jar) + - [RAPIDS Accelerator for Apache Spark 23.12.0 - Scala 2.12 jar.asc](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.12.0/rapids-4-spark_2.12-23.12.0.jar.asc) + +- **Scala 2.13:** + - [RAPIDS Accelerator for Apache Spark 23.12.0 - Scala 2.13 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.13/23.12.0/rapids-4-spark_2.13-23.12.0.jar) + - [RAPIDS Accelerator for Apache Spark 23.12.0 - Scala 2.13 jar.asc](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.13/23.12.0/rapids-4-spark_2.13-23.12.0.jar.asc) This package is built against CUDA 11.8. It is tested on V100, T4, A10, A100, L4 and H100 GPUs with CUDA 11.8 through CUDA 12.0. ### Verify signature -* Download the [RAPIDS Accelerator for Apache Spark 23.10.0 jar](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar) - and [RAPIDS Accelerator for Apache Spark 23.10.0 jars.asc](https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/23.10.0/rapids-4-spark_2.12-23.10.0.jar.asc) * Download the [PUB_KEY](https://keys.openpgp.org/search?q=sw-spark@nvidia.com). * Import the public key: `gpg --import PUB_KEY` -* Verify the signature: `gpg --verify rapids-4-spark_2.12-23.10.0.jar.asc rapids-4-spark_2.12-23.10.0.jar` +* Verify the signature for Scala 2.12 jar: + `gpg --verify rapids-4-spark_2.12-23.12.0.jar.asc rapids-4-spark_2.12-23.12.0.jar` +* Verify the signature for Scala 2.13 jar: + `gpg --verify rapids-4-spark_2.13-23.12.0.jar.asc rapids-4-spark_2.13-23.12.0.jar` The output of signature verify: @@ -83,17 +91,16 @@ The output of signature verify: ### Release Notes New functionality and performance improvements for this release include: -* Introduced support for Spark 3.5.0. -* Improved memory management for better control in YARN and K8s on CSP. -* Strengthened Parquet and ORC tests for enhanced stability and support. -* Reduce GPU out-of-memory (OOM) occurrences. -* Enhanced driver log with actionable insights. +* Introduced support for chunked reading of ORC files. +* Enhanced support for additional time zones and added stack function support. +* Enhanced performance for join and aggregation operations. +* Kernel optimizations have been implemented to improve Parquet read performance. +* RAPIDS Accelerator also built and tested with Scala 2.13. +* Last version to support Pascal-based Nvidia GPUs; discontinued in the next release. * Qualification and Profiling tool: - * Enhanced user experience with the availability of the 'ascli' tool for qualification and - profiling across all platforms. - * The qualification tool now accommodates CPU-fallback transitions and broadens the speedup factor coverage. - * Extended diagnostic support for user tools to cover EMR, Databricks AWS, and Databricks Azure. - * Introduced support for cluster configuration recommendations in the profiling tool for supported platforms. + * Profiling Tool now processes Spark Driver log for GPU runs, enhancing feature analysis. + * Auto-tuner recommendations include AQE settings for optimized performance. + * New configurations in Profiler for enabling off-default features: udfCompiler, incompatibleDateFormats, hasExtendedYearValues. For a detailed list of changes, please refer to the [CHANGELOG](https://github.com/NVIDIA/spark-rapids/blob/main/CHANGELOG.md). diff --git a/docs/supported_ops.md b/docs/supported_ops.md index 48949ab00ef..414a53c56ac 100644 --- a/docs/supported_ops.md +++ b/docs/supported_ops.md @@ -1894,7 +1894,7 @@ are limited. S S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -1915,7 +1915,7 @@ are limited. S S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -3333,7 +3333,7 @@ are limited. S S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -6061,7 +6061,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -6082,7 +6082,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -7162,7 +7162,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -7183,7 +7183,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -7294,7 +7294,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -7315,7 +7315,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -8141,8 +8141,8 @@ are limited. NS -PS
MAP only supports keys and values that are of STRING type;
unsupported child types BOOLEAN, BYTE, SHORT, INT, LONG, FLOAT, DOUBLE, DATE, TIMESTAMP, DECIMAL, NULL, BINARY, CALENDAR, ARRAY, MAP, STRUCT, UDT
-NS +PS
MAP only supports keys and values that are of STRING type;
UTC is only supported TZ for child TIMESTAMP;
unsupported child types NULL, BINARY, CALENDAR, MAP, UDT
+PS
UTC is only supported TZ for child TIMESTAMP;
unsupported child types NULL, BINARY, CALENDAR, MAP, UDT
@@ -8826,7 +8826,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -8847,7 +8847,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -8958,7 +8958,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -8979,7 +8979,7 @@ are limited. NS S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -9142,7 +9142,7 @@ are limited. S S PS
UTC is only supported TZ for TIMESTAMP
-NS +S NS NS NS @@ -13351,22 +13351,22 @@ are limited. -StartsWith - -Starts with +Stack +`stack` +Separates expr1, ..., exprk into n rows. None project -src +n +PS
Literal value only
-S @@ -13377,29 +13377,28 @@ are limited. -search - - - - - - - - - -PS
Literal value only
- - - - - - - - +expr +S +S +S +S +S +S +S +S +PS
UTC is only supported TZ for TIMESTAMP
+S +S +S +NS +NS +PS
UTC is only supported TZ for child TIMESTAMP;
unsupported child types BINARY, CALENDAR, UDT
+PS
UTC is only supported TZ for child TIMESTAMP;
unsupported child types BINARY, CALENDAR, UDT
+PS
UTC is only supported TZ for child TIMESTAMP;
unsupported child types BINARY, CALENDAR, UDT
+NS result -S @@ -13414,6 +13413,7 @@ are limited. +PS
UTC is only supported TZ for child TIMESTAMP;
unsupported child types BINARY, CALENDAR, UDT
@@ -13445,6 +13445,74 @@ are limited. UDT +StartsWith + +Starts with +None +project +src + + + + + + + + + +S + + + + + + + + + + +search + + + + + + + + + +PS
Literal value only
+ + + + + + + + + + +result +S + + + + + + + + + + + + + + + + + + + StringInstr `instr` Instr string operator @@ -14460,6 +14528,79 @@ are limited. +StructsToJson +`to_json` +Converts structs to JSON text format +This is disabled by default because to_json support is experimental. See compatibility guide for more information. +project +struct +S +S +S +S +S +S +S +S +PS
UTC is only supported TZ for TIMESTAMP
+S +S + + + +PS
UTC is only supported TZ for child TIMESTAMP
+PS
UTC is only supported TZ for child TIMESTAMP
+PS
UTC is only supported TZ for child TIMESTAMP
+ + + +result + + + + + + + + + +S + + + + + + + + + + +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + Substring `substr`, `substring` Substring operator @@ -14549,32 +14690,6 @@ are limited. -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - SubstringIndex `substring_index` substring_index operator @@ -14886,26 +15001,52 @@ are limited. -Tanh -`tanh` -Hyperbolic tangent -None -project -input - - - - - - -S - - - - - - - +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + +Tanh +`tanh` +Hyperbolic tangent +None +project +input + + + + + + +S + + + + + + + @@ -14976,32 +15117,6 @@ are limited. -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - TimeAdd Adds interval to timestamp @@ -15300,6 +15415,32 @@ are limited. +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + TransformValues `transform_values` Transform values in a map using a transform function @@ -15368,32 +15509,6 @@ are limited. -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - UnaryMinus `negative` Negate a numeric value @@ -15694,6 +15809,32 @@ are limited. +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + UnscaledValue Convert a Decimal to an unscaled long value for some aggregation optimizations @@ -15741,32 +15882,6 @@ are limited. -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - Upper `upper`, `ucase` String uppercase operator @@ -16091,6 +16206,32 @@ are limited. +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + AggregateExpression Aggregate expression @@ -16287,32 +16428,6 @@ are limited. S -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - ApproximatePercentile `percentile_approx`, `approx_percentile` Approximate percentile @@ -16487,6 +16602,32 @@ are limited. +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + Average `avg`, `mean` Average aggregate operator @@ -16753,32 +16894,6 @@ are limited. -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - CollectSet `collect_set` Collect a set of unique elements, not supported in reduction @@ -16912,6 +17027,32 @@ are limited. +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + Count `count` Count aggregate operator @@ -17178,32 +17319,6 @@ are limited. NS -Expression -SQL Functions(s) -Description -Notes -Context -Param/Output -BOOLEAN -BYTE -SHORT -INT -LONG -FLOAT -DOUBLE -DATE -TIMESTAMP -STRING -DECIMAL -NULL -BINARY -CALENDAR -ARRAY -MAP -STRUCT -UDT - - Last `last`, `last_value` last aggregate operator @@ -17337,6 +17452,32 @@ are limited. NS +Expression +SQL Functions(s) +Description +Notes +Context +Param/Output +BOOLEAN +BYTE +SHORT +INT +LONG +FLOAT +DOUBLE +DATE +TIMESTAMP +STRING +DECIMAL +NULL +BINARY +CALENDAR +ARRAY +MAP +STRUCT +UDT + + Max `max` Max aggregate operator @@ -17603,6 +17744,180 @@ are limited. NS +Percentile +`percentile` +Aggregation computing exact percentile +None +aggregation +input + +S +S +S +S +S +S + + + + + + + + + + + + + +percentage + + + + + + +PS
Literal value only
+ + + + + + + +S + + + + + +frequency + + + + +S + + + + + + + + + +S + + + + + +result + + + + + + +S + + + + + + + +S + + + + + +reduction +input + +S +S +S +S +S +S + + + + + + + + + + + + + +percentage + + + + + + +PS
Literal value only
+ + + + + + + +S + + + + + +frequency + + + + +S + + + + + + + + + +S + + + + + +result + + + + + + +S + + + + + + + +S + + + + + Expression SQL Functions(s) Description diff --git a/index.md b/index.md index 0334ecc5002..724e6b79a82 100644 --- a/index.md +++ b/index.md @@ -6,6 +6,9 @@ permalink: / description: This site serves as a collection of documentation about the RAPIDS accelerator for Apache Spark --- # Overview +**If you are a customer looking for information on how to adopt RAPIDS Accelerator for Apache Spark +for your Spark workloads, please go to our User Guide for more information: [link](https://docs.nvidia.com/spark-rapids/user-guide/latest/index.html).** + The RAPIDS Accelerator for Apache Spark leverages GPUs to accelerate processing via the [RAPIDS libraries](http://rapids.ai). @@ -19,5 +22,3 @@ the scale of the Spark distributed computing framework. The RAPIDS Accelerator built-in accelerated shuffle based on [UCX](https://github.com/openucx/ucx/) that can be configured to leverage GPU-to-GPU communication and RDMA capabilities. -If you are a customer looking for information on how to adopt RAPIDS Accelerator for Apache Spark -for your Spark workloads, please go to our User Guide for more information: [link](https://docs.nvidia.com/spark-rapids/user-guide/latest/index.html).