spark-instrumented-optimizer/docs
Kent Yao 2dd6807e42 [SPARK-28023][SQL] Add trim logic in UTF8String's toInt/toLong to make it consistent with other string-numeric casting
### What changes were proposed in this pull request?

Modify `UTF8String.toInt/toLong` to support trim spaces for both sides before converting it to byte/short/int/long.

With this kind of "cheap" trim can help improve performance for casting string to integrals. The idea is from https://github.com/apache/spark/pull/24872#issuecomment-556917834

### Why are the changes needed?

make the behavior consistent.

### Does this PR introduce any user-facing change?
yes, cast string to an integral type, and binary comparison between string and integrals will trim spaces first. their behavior will be consistent with float and double.
### How was this patch tested?
1. add ut.
2. benchmark tests
 the benchmark is modified based on https://github.com/apache/spark/pull/24872#issuecomment-503827016

```scala
/*
 * 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.
 */

package org.apache.spark.sql.execution.benchmark

import org.apache.spark.benchmark.Benchmark

/**
 * Benchmark trim the string when casting string type to Boolean/Numeric types.
 * To run this benchmark:
 * {{{
 *   1. without sbt:
 *      bin/spark-submit --class <this class> --jars <spark core test jar> <spark sql test jar>
 *   2. build/sbt "sql/test:runMain <this class>"
 *   3. generate result: SPARK_GENERATE_BENCHMARK_FILES=1 build/sbt "sql/test:runMain <this class>"
 *      Results will be written to "benchmarks/CastBenchmark-results.txt".
 * }}}
 */
object CastBenchmark extends SqlBasedBenchmark {
This conversation was marked as resolved by yaooqinn

  override def runBenchmarkSuite(mainArgs: Array[String]): Unit = {
    val title = "Cast String to Integral"
    runBenchmark(title) {
      withTempPath { dir =>
        val N = 500L << 14
        val df = spark.range(N)
        val types = Seq("int", "long")
        (1 to 5).by(2).foreach { i =>
          df.selectExpr(s"concat(id, '${" " * i}') as str")
            .write.mode("overwrite").parquet(dir + i.toString)
        }

        val benchmark = new Benchmark(title, N, minNumIters = 5, output = output)
        Seq(true, false).foreach { trim =>
          types.foreach { t =>
            val str = if (trim) "trim(str)" else "str"
            val expr = s"cast($str as $t) as c_$t"
            (1 to 5).by(2).foreach { i =>
              benchmark.addCase(expr + s" - with $i spaces") { _ =>
                spark.read.parquet(dir + i.toString).selectExpr(expr).collect()
              }
            }
          }
        }
        benchmark.run()
      }
    }
  }
}
```
#### benchmark result.
normal trim v.s. trim in toInt/toLong
```java
================================================================================================
Cast String to Integral
================================================================================================

Java HotSpot(TM) 64-Bit Server VM 1.8.0_231-b11 on Mac OS X 10.15.1
Intel(R) Core(TM) i5-5287U CPU  2.90GHz
Cast String to Integral:                  Best Time(ms)   Avg Time(ms)   Stdev(ms)    Rate(M/s)   Per Row(ns)   Relative
------------------------------------------------------------------------------------------------------------------------
cast(trim(str) as int) as c_int - with 1 spaces          10220          12994        1337          0.8        1247.5       1.0X
cast(trim(str) as int) as c_int - with 3 spaces           4763           8356         357          1.7         581.4       2.1X
cast(trim(str) as int) as c_int - with 5 spaces           4791           8042         NaN          1.7         584.9       2.1X
cast(trim(str) as long) as c_long - with 1 spaces           4014           6755         NaN          2.0         490.0       2.5X
cast(trim(str) as long) as c_long - with 3 spaces           4737           6938         NaN          1.7         578.2       2.2X
cast(trim(str) as long) as c_long - with 5 spaces           4478           6919        1404          1.8         546.6       2.3X
cast(str as int) as c_int - with 1 spaces           4443           6222         NaN          1.8         542.3       2.3X
cast(str as int) as c_int - with 3 spaces           3659           3842         170          2.2         446.7       2.8X
cast(str as int) as c_int - with 5 spaces           4372           7996         NaN          1.9         533.7       2.3X
cast(str as long) as c_long - with 1 spaces           3866           5838         NaN          2.1         471.9       2.6X
cast(str as long) as c_long - with 3 spaces           3793           5449         NaN          2.2         463.0       2.7X
cast(str as long) as c_long - with 5 spaces           4947           5961        1198          1.7         603.9       2.1X
```

Closes #26622 from yaooqinn/cheapstringtrim.

Authored-by: Kent Yao <yaooqinn@hotmail.com>
Signed-off-by: Wenchen Fan <wenchen@databricks.com>
2019-11-22 19:32:27 +08:00
..
_data [SPARK-28816][DOC][SQL] Document ADD JAR statement in SQL Reference 2019-10-07 13:39:03 -05:00
_includes [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
_layouts [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
_plugins [SPARK-28752][BUILD][DOCS] Documentation build to support Python 3 2019-11-15 13:44:20 +09:00
css [SPARK-28752][BUILD][DOCS] Documentation build to support Python 3 2019-11-15 13:44:20 +09:00
img [SPARK-29894][SQL][WEBUI] Add Codegen Stage Id to Spark plan graphs in Web UI SQL Tab 2019-11-20 23:20:33 +08:00
js [SPARK-28004][UI] Update jquery to 3.4.1 2019-06-14 22:19:20 -07:00
_config.yml [SPARK-28752][BUILD][DOCS] Documentation build to support Python 3 2019-11-15 13:44:20 +09:00
api.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
building-spark.md [SPARK-29256][DOCS] Fix typo in building document 2019-09-26 08:23:43 -05:00
cloud-integration.md [SPARK-29028][DOCS] Add links to IBM Cloud Object Storage connector in cloud-integration.md 2019-09-10 11:19:55 -05:00
cluster-overview.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
configuration.md [SPARK-29902][DOC][MINOR] Add listener event queue capacity configuration to documentation 2019-11-15 08:20:10 -06:00
contributing-to-spark.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
core-migration-guide.md [SPARK-29399][CORE] Remove old ExecutorPlugin interface 2019-11-13 09:52:40 +09:00
graphx-programming-guide.md [SPARK-29401][FOLLOWUP] Additional cases where a .parallelize call with Array is ambiguous in 2.13 2019-10-09 10:27:05 -07:00
hadoop-provided.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
hardware-provisioning.md [MINOR][DOCS] Fix some broken links in docs 2019-04-13 22:27:25 +09:00
index.md [SPARK-29668][DOCS] Deprecate Python 3 prior to version 3.6 2019-10-30 12:31:23 -07:00
job-scheduling.md [SPARK-22340][PYTHON] Add a mode to pin Python thread into JVM's 2019-11-08 06:44:58 +09:00
migration-guide.md [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
ml-advanced.md [MINOR][DOCS] Fix some broken links in docs 2019-04-13 22:27:25 +09:00
ml-ann.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-classification-regression.md [SPARK-29942][ML] Impl Complement Naive Bayes Classifier 2019-11-21 18:22:05 +08:00
ml-clustering.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-collaborative-filtering.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-datasource.md [SPARK-25584][ML][DOC] datasource for libsvm user guide 2019-08-01 09:15:42 -05:00
ml-decision-tree.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-ensembles.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-features.md [SPARK-28399][ML][PYTHON] implement RobustScaler 2019-07-30 10:24:33 -05:00
ml-frequent-pattern-mining.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-guide.md [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
ml-linear-methods.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-migration-guide.md [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
ml-pipeline.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-statistics.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-survival-regression.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
ml-tuning.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-classification-regression.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-clustering.md [MINOR][DOCS] Fix some broken links in docs 2019-04-13 22:27:25 +09:00
mllib-collaborative-filtering.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-data-types.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-decision-tree.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-dimensionality-reduction.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-ensembles.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-evaluation-metrics.md [SPARK-28980][CORE][SQL][STREAMING][MLLIB] Remove most items deprecated in Spark 2.2.0 or earlier, for Spark 3 2019-09-09 10:19:40 -05:00
mllib-feature-extraction.md [SPARK-28980][CORE][SQL][STREAMING][MLLIB] Remove most items deprecated in Spark 2.2.0 or earlier, for Spark 3 2019-09-09 10:19:40 -05:00
mllib-frequent-pattern-mining.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-guide.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-isotonic-regression.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-linear-methods.md [SPARK-28980][CORE][SQL][STREAMING][MLLIB] Remove most items deprecated in Spark 2.2.0 or earlier, for Spark 3 2019-09-09 10:19:40 -05:00
mllib-naive-bayes.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-optimization.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-pmml-model-export.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
mllib-statistics.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
monitoring.md [SPARK-29654][CORE] Add configuration to allow disabling registration of static sources to the metrics system 2019-11-09 12:13:13 -08:00
programming-guide.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
pyspark-migration-guide.md [SPARK-29664][PYTHON][SQL] Column.getItem behavior is not consistent with Scala 2019-11-01 12:25:48 +09:00
quick-start.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
rdd-programming-guide.md [SPARK-27942][DOCS][PYTHON] Note that Python 2.7 is deprecated in Spark documentation 2019-06-04 07:59:25 -07:00
README.md [SPARK-28752][BUILD][DOCS] Documentation build to support Python 3 2019-11-15 13:44:20 +09:00
running-on-kubernetes.md [SPARK-29790][DOC] Note required port for Kube API 2019-11-08 09:33:07 -08:00
running-on-mesos.md [SPARK-28473][DOC] Stylistic consistency of build command in README 2019-07-23 16:29:46 -07:00
running-on-yarn.md [SPARK-29603][YARN] Support application priority for YARN priority scheduling 2019-11-06 10:12:27 -08:00
security.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
spark-standalone.md [MINOR][DOCS] Fix few typos in the java docs 2019-09-12 09:30:03 +09:00
sparkr-migration-guide.md [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
sparkr.md [SPARK-29339][R] Support Arrow 0.14 in vectoried dapply and gapply (test it in AppVeyor build) 2019-10-04 08:56:45 +09:00
sql-data-sources-avro.md [MINOR][DOC] Avro data source documentation change 2019-06-04 16:17:53 -07:00
sql-data-sources-binaryFile.md [SPARK-27627][SQL] Make option "pathGlobFilter" as a general option for all file sources 2019-05-09 08:41:43 +09:00
sql-data-sources-hive-tables.md [MINOR][DOCS] Use proper html tag in markdown 2019-10-30 15:30:58 +09:00
sql-data-sources-jdbc.md [MINOR][DOCS] Use proper html tag in markdown 2019-10-30 15:30:58 +09:00
sql-data-sources-json.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
sql-data-sources-load-save-functions.md [SPARK-27627][SQL] Make option "pathGlobFilter" as a general option for all file sources 2019-05-09 08:41:43 +09:00
sql-data-sources-orc.md [SPARK-29529][DOCS] Remove unnecessary orc version and hive version in doc 2019-10-22 14:49:23 +09:00
sql-data-sources-parquet.md [MINOR][DOCS] Use proper html tag in markdown 2019-10-30 15:30:58 +09:00
sql-data-sources-troubleshooting.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
sql-data-sources.md [SPARK-27472] add user guide for binary file data source 2019-04-29 08:58:56 -07:00
sql-distributed-sql-engine.md [SPARK-21067][DOC] Fix Thrift Server - CTAS fail with Unable to move source 2019-08-18 15:55:43 -05:00
sql-getting-started.md [SPARK-28793][DOC][SQL] Document CREATE FUNCTION in SQL Reference 2019-10-22 08:56:44 -05:00
sql-keywords.md [SPARK-29951][SQL] Make the behavior of Postgre dialect independent of ansi mode config 2019-11-21 00:56:48 +08:00
sql-migration-guide.md [SPARK-28023][SQL] Add trim logic in UTF8String's toInt/toLong to make it consistent with other string-numeric casting 2019-11-22 19:32:27 +08:00
sql-migration-old.md [SPARK-29052][DOCS][ML][PYTHON][CORE][R][SQL][SS] Create a Migration Guide tap in Spark documentation 2019-09-15 11:17:30 -07:00
sql-performance-tuning.md [SPARK-27225][SQL] Implement join strategy hints 2019-04-12 00:14:37 +08:00
sql-programming-guide.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
sql-pyspark-pandas-with-arrow.md [SPARK-29126][PYSPARK][DOC] Pandas Cogroup udf usage guide 2019-10-31 10:41:57 +09:00
sql-ref-arithmetic-ops.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-datatypes.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-builtin-aggregate.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-builtin-scalar.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-builtin.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-udf-aggregate.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-udf-scalar.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions-udf.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-functions.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-nan-semantics.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-null-semantics.md [SPARK-28773][DOC][SQL] Handling of NULL data in Spark SQL 2019-09-09 13:41:17 -07:00
sql-ref-syntax-aux-analyze-table.md [SPARK-28788][DOC][SQL] Document ANALYZE TABLE statement in SQL Reference 2019-09-03 15:26:12 -07:00
sql-ref-syntax-aux-analyze.md [SPARK-28788][DOC][SQL] Document ANALYZE TABLE statement in SQL Reference 2019-09-03 15:26:12 -07:00
sql-ref-syntax-aux-cache-cache-table.md [SPARK-28790][DOC][SQL] Document CACHE TABLE statement in SQL Reference 2019-09-01 17:08:09 -07:00
sql-ref-syntax-aux-cache-clear-cache.md [SPARK-28831][DOC][SQL] Document CLEAR CACHE statement in SQL Reference 2019-09-09 14:28:55 -07:00
sql-ref-syntax-aux-cache-uncache-table.md [SPARK-28831][DOC][SQL] Document CLEAR CACHE statement in SQL Reference 2019-09-09 14:28:55 -07:00
sql-ref-syntax-aux-cache.md [SPARK-28831][DOC][SQL] Document CLEAR CACHE statement in SQL Reference 2019-09-09 14:28:55 -07:00
sql-ref-syntax-aux-conf-mgmt-reset.md [SPARK-28814][SQL][DOC] Document SET/RESET in SQL Reference 2019-09-17 14:36:56 -07:00
sql-ref-syntax-aux-conf-mgmt-set.md [SPARK-28814][SQL][DOC] Document SET/RESET in SQL Reference 2019-09-17 14:36:56 -07:00
sql-ref-syntax-aux-conf-mgmt.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-aux-describe-database.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-aux-describe-function.md [SPARK-28808][DOCS][SQL] Document SHOW FUNCTIONS in SQL Reference 2019-09-04 11:47:10 -07:00
sql-ref-syntax-aux-describe-query.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-aux-describe-table.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-aux-describe.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-aux-refresh-table.md [SPARK-28828][DOC] Document REFRESH TABLE command 2019-09-12 23:00:42 -07:00
sql-ref-syntax-aux-resource-mgmt-add-file.md [SPARK-28816][DOC][SQL] Document ADD JAR statement in SQL Reference 2019-10-07 13:39:03 -05:00
sql-ref-syntax-aux-resource-mgmt-add-jar.md [SPARK-28816][DOC][SQL] Document ADD JAR statement in SQL Reference 2019-10-07 13:39:03 -05:00
sql-ref-syntax-aux-resource-mgmt-list-file.md [SPARK-28816][DOC][SQL] Document ADD JAR statement in SQL Reference 2019-10-07 13:39:03 -05:00
sql-ref-syntax-aux-resource-mgmt-list-jar.md [SPARK-28816][DOC][SQL] Document ADD JAR statement in SQL Reference 2019-10-07 13:39:03 -05:00
sql-ref-syntax-aux-resource-mgmt.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-aux-show-columns.md [SPARK-28806][DOCS][SQL] Document SHOW COLUMNS in SQL Reference 2019-09-03 09:39:26 -07:00
sql-ref-syntax-aux-show-create-table.md [SPARK-28813][DOC][SQL] Document SHOW CREATE TABLE in SQL Reference 2019-10-04 16:16:00 -05:00
sql-ref-syntax-aux-show-databases.md [SPARK-29901][SQL][DOC] Fix broken links in SQL Reference 2019-11-15 11:29:28 +09:00
sql-ref-syntax-aux-show-functions.md [SPARK-28808][DOCS][SQL] Document SHOW FUNCTIONS in SQL Reference 2019-09-04 11:47:10 -07:00
sql-ref-syntax-aux-show-partitions.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-aux-show-table.md [SPARK-28809][DOC][SQL] Document SHOW TABLE in SQL Reference 2019-11-04 11:58:41 -06:00
sql-ref-syntax-aux-show-tables.md [SPARK-28810][DOC][SQL] Document SHOW TABLES in SQL Reference 2019-10-12 09:21:44 -05:00
sql-ref-syntax-aux-show-tblproperties.md [SPARK-29901][SQL][DOC] Fix broken links in SQL Reference 2019-11-15 11:29:28 +09:00
sql-ref-syntax-aux-show.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-aux.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-ddl-alter-database.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-ddl-alter-table.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-ddl-alter-view.md [SPARK-28833][DOCS][SQL] Document ALTER VIEW command 2019-11-14 14:58:32 -06:00
sql-ref-syntax-ddl-create-database.md [SPARK-28792][SQL][DOC] Document CREATE DATABASE statement in SQL Reference 2019-09-17 14:40:08 -07:00
sql-ref-syntax-ddl-create-function.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-ddl-create-table.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-ddl-create-view.md [SPARK-29901][SQL][DOC] Fix broken links in SQL Reference 2019-11-15 11:29:28 +09:00
sql-ref-syntax-ddl-drop-database.md [SPARK-28796][DOC] Document DROP DATABASE statement in SQL Reference 2019-09-12 23:10:50 -07:00
sql-ref-syntax-ddl-drop-function.md [SPARK-28797][DOC] Document DROP FUNCTION statement in SQL Reference 2019-10-08 19:47:39 -05:00
sql-ref-syntax-ddl-drop-table.md [SPARK-28798][DOC][SQL] Document DROP TABLE/VIEW statement in SQL Reference 2019-11-04 11:52:19 -06:00
sql-ref-syntax-ddl-drop-view.md [SPARK-28798][FOLLOW-UP] Add alter view link to drop view 2019-11-13 07:11:26 -06:00
sql-ref-syntax-ddl-repair-table.md [SPARK-28800][DOC][SQL] Document REPAIR TABLE statement in SQL Reference 2019-10-06 11:19:13 -05:00
sql-ref-syntax-ddl-truncate-table.md [SPARK-29901][SQL][DOC] Fix broken links in SQL Reference 2019-11-15 11:29:28 +09:00
sql-ref-syntax-ddl.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-dml-insert-into.md [SPARK-28786][DOC][SQL][FOLLOW-UP] Change "Related Statements" to bold 2019-08-31 14:58:41 -07:00
sql-ref-syntax-dml-insert-overwrite-directory-hive.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-dml-insert-overwrite-directory.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-dml-insert-overwrite-table.md [SPARK-29788][DOC] Fix the typos in the SQL reference documents 2019-11-09 08:04:14 -06:00
sql-ref-syntax-dml-insert.md [SPARK-28786][DOC][SQL] Document INSERT statement in SQL Reference 2019-08-29 09:00:42 -07:00
sql-ref-syntax-dml-load.md [SPARK-28787][DOC][SQL] Document LOAD DATA statement in SQL Reference 2019-10-22 08:55:37 -05:00
sql-ref-syntax-dml.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-aggregation.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-explain.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-sampling.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-cte.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-distinct.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-groupby.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-having.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-hints.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-join.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-limit.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-orderby.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-setops.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-subqueries.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-select-usedb.md [SPARK-28822][DOC][SQL] Document USE DATABASE in SQL Reference 2019-09-19 13:04:17 -07:00
sql-ref-syntax-qry-select.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry-window.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax-qry.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref-syntax.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
sql-ref.md [SPARK-28734][DOC] Initial table of content in the left hand side bar for SQL doc 2019-08-18 23:17:50 -07:00
ss-migration-guide.md [SPARK-26154][SS] Streaming left/right outer join should not return outer nulls for already matched rows 2019-11-11 15:47:17 -08:00
storage-openstack-swift.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
streaming-custom-receivers.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
streaming-kafka-0-10-integration.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
streaming-kafka-integration.md [SPARK-26918][DOCS] All .md should have ASF license header 2019-03-30 19:49:45 -05:00
streaming-kinesis-integration.md [SPARK-28980][CORE][SQL][STREAMING][MLLIB] Remove most items deprecated in Spark 2.2.0 or earlier, for Spark 3 2019-09-09 10:19:40 -05:00
streaming-programming-guide.md [SPARK-28980][CORE][SQL][STREAMING][MLLIB] Remove most items deprecated in Spark 2.2.0 or earlier, for Spark 3 2019-09-09 10:19:40 -05:00
structured-streaming-kafka-integration.md [MINOR][DOCS] Use proper html tag in markdown 2019-10-30 15:30:58 +09:00
structured-streaming-programming-guide.md [SPARK-20568][SS] Provide option to clean up completed files in streaming query 2019-11-04 15:16:10 -08:00
submitting-applications.md [SPARK-28609][DOC] Fix broken styles/links and make up-to-date 2019-08-04 09:42:47 -07:00
tuning.md [SPARK-23472][CORE] Add defaultJavaOptions for driver and executor. 2019-07-11 09:37:26 -07:00
web-ui.md [SPARK-29894][SQL][WEBUI] Add Codegen Stage Id to Spark plan graphs in Web UI SQL Tab 2019-11-20 23:20:33 +08:00

license
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.

Welcome to the Spark documentation!

This readme will walk you through navigating and building the Spark documentation, which is included here with the Spark source code. You can also find documentation specific to release versions of Spark at https://spark.apache.org/documentation.html.

Read on to learn more about viewing documentation in plain text (i.e., markdown) or building the documentation yourself. Why build it yourself? So that you have the docs that correspond to whichever version of Spark you currently have checked out of revision control.

Prerequisites

The Spark documentation build uses a number of tools to build HTML docs and API docs in Scala, Java, Python, R and SQL.

You need to have Ruby and Python installed. Also install the following libraries:

$ sudo gem install jekyll jekyll-redirect-from rouge
# Following is needed only for generating API docs
$ sudo pip install sphinx pypandoc mkdocs
$ sudo Rscript -e 'install.packages(c("knitr", "devtools", "rmarkdown"), repos="https://cloud.r-project.org/")'
$ sudo Rscript -e 'devtools::install_version("roxygen2", version = "5.0.1", repos="https://cloud.r-project.org/")'
$ sudo Rscript -e 'devtools::install_version("testthat", version = "1.0.2", repos="https://cloud.r-project.org/")'

Note: If you are on a system with both Ruby 1.9 and Ruby 2.0 you may need to replace gem with gem2.0.

Note: Other versions of roxygen2 might work in SparkR documentation generation but RoxygenNote field in $SPARK_HOME/R/pkg/DESCRIPTION is 5.0.1, which is updated if the version is mismatched.

Generating the Documentation HTML

We include the Spark documentation as part of the source (as opposed to using a hosted wiki, such as the github wiki, as the definitive documentation) to enable the documentation to evolve along with the source code and be captured by revision control (currently git). This way the code automatically includes the version of the documentation that is relevant regardless of which version or release you have checked out or downloaded.

In this directory you will find text files formatted using Markdown, with an ".md" suffix. You can read those text files directly if you want. Start with index.md.

Execute jekyll build from the docs/ directory to compile the site. Compiling the site with Jekyll will create a directory called _site containing index.html as well as the rest of the compiled files.

$ cd docs
$ jekyll build

You can modify the default Jekyll build as follows:

# Skip generating API docs (which takes a while)
$ SKIP_API=1 jekyll build

# Serve content locally on port 4000
$ jekyll serve --watch

# Build the site with extra features used on the live page
$ PRODUCTION=1 jekyll build

API Docs (Scaladoc, Javadoc, Sphinx, roxygen2, MkDocs)

You can build just the Spark scaladoc and javadoc by running ./build/sbt unidoc from the $SPARK_HOME directory.

Similarly, you can build just the PySpark docs by running make html from the $SPARK_HOME/python/docs directory. Documentation is only generated for classes that are listed as public in __init__.py. The SparkR docs can be built by running $SPARK_HOME/R/create-docs.sh, and the SQL docs can be built by running $SPARK_HOME/sql/create-docs.sh after building Spark first.

When you run jekyll build in the docs directory, it will also copy over the scaladoc and javadoc for the various Spark subprojects into the docs directory (and then also into the _site directory). We use a jekyll plugin to run ./build/sbt unidoc before building the site so if you haven't run it (recently) it may take some time as it generates all of the scaladoc and javadoc using Unidoc. The jekyll plugin also generates the PySpark docs using Sphinx, SparkR docs using roxygen2 and SQL docs using MkDocs.

NOTE: To skip the step of building and copying over the Scala, Java, Python, R and SQL API docs, run SKIP_API=1 jekyll build. In addition, SKIP_SCALADOC=1, SKIP_PYTHONDOC=1, SKIP_RDOC=1 and SKIP_SQLDOC=1 can be used to skip a single step of the corresponding language. SKIP_SCALADOC indicates skipping both the Scala and Java docs.