Apache Spark - A unified analytics engine for large-scale data processing
Go to file
Herman van Hovell 7cd7f22025 [SPARK-12575][SQL] Grammar parity with existing SQL parser
In this PR the new CatalystQl parser stack reaches grammar parity with the old Parser-Combinator based SQL Parser. This PR also replaces all uses of the old Parser, and removes it from the code base.

Although the existing Hive and SQL parser dialects were mostly the same, some kinks had to be worked out:
- The SQL Parser allowed syntax like ```APPROXIMATE(0.01) COUNT(DISTINCT a)```. In order to make this work we needed to hardcode approximate operators in the parser, or we would have to create an approximate expression. ```APPROXIMATE_COUNT_DISTINCT(a, 0.01)``` would also do the job and is much easier to maintain. So, this PR **removes** this keyword.
- The old SQL Parser supports ```LIMIT``` clauses in nested queries. This is **not supported** anymore. See https://github.com/apache/spark/pull/10689 for the rationale for this.
- Hive has a charset name char set literal combination it supports, for instance the following expression ```_ISO-8859-1 0x4341464562616265``` would yield this string: ```CAFEbabe```. Hive will only allow charset names to start with an underscore. This is quite annoying in spark because as soon as you use a tuple names will start with an underscore. In this PR we **remove** this feature from the parser. It would be quite easy to implement such a feature as an Expression later on.
- Hive and the SQL Parser treat decimal literals differently. Hive will turn any decimal into a ```Double``` whereas the SQL Parser would convert a non-scientific decimal into a ```BigDecimal```, and would turn a scientific decimal into a Double. We follow Hive's behavior here. The new parser supports a big decimal literal, for instance: ```81923801.42BD```, which can be used when a big decimal is needed.

cc rxin viirya marmbrus yhuai cloud-fan

Author: Herman van Hovell <hvanhovell@questtec.nl>

Closes #10745 from hvanhovell/SPARK-12575-2.
2016-01-15 15:19:10 -08:00
assembly [SPARK-11808] Remove Bagel. 2015-12-19 22:40:35 -08:00
bin [SPARK-12652][PYSPARK] Upgrade Py4J to 0.9.1 2016-01-12 14:27:05 -08:00
build [SPARK-12475][BUILD] Upgrade Zinc from 0.3.5.3 to 0.3.9 2015-12-22 10:23:24 -08:00
conf [SPARK-11929][CORE] Make the repl log4j configuration override the root logger. 2015-11-24 15:08:02 -06:00
core [SPARK-12716][WEB UI] Add a TOTALS row to the Executors Web UI 2016-01-15 16:03:21 -06:00
data [SPARK-9057][STREAMING] Twitter example joining to static RDD of word sentiment values 2015-12-18 15:06:54 +00:00
dev [SPARK-12667] Remove block manager's internal "external block store" API 2016-01-15 12:03:28 -08:00
docker [SPARK-11491] Update build to use Scala 2.10.5 2015-11-04 16:58:38 -08:00
docker-integration-tests [SPARK-3873][TESTS] Import ordering fixes. 2016-01-05 19:07:39 -08:00
docs [SPARK-2930] clarify docs on using webhdfs with spark.yarn.access.nam… 2016-01-15 13:11:27 +00:00
examples [SPARK-12667] Remove block manager's internal "external block store" API 2016-01-15 12:03:28 -08:00
external [SPARK-12692][BUILD][STREAMING] Scala style: Fix the style violation (Space before "," or ":") 2016-01-11 21:06:22 -08:00
extras [SPARK-12692][BUILD][HOT-FIX] Fix the scala style of KinesisBackedBlockRDDSuite.scala. 2016-01-13 10:01:15 -08:00
graphx [SPARK-12655][GRAPHX] GraphX does not unpersist RDDs 2016-01-15 12:04:05 +00:00
launcher [SPARK-12707][SPARK SUBMIT] Remove submit python/R scripts through py… 2016-01-13 23:50:08 -08:00
licenses [SPARK-10833] [BUILD] Inline, organize BSD/MIT licenses in LICENSE 2015-09-28 22:56:43 -04:00
mllib [SPARK-12830] Java style: disallow trailing whitespaces. 2016-01-14 23:33:45 -08:00
network [SPARK-12830] Java style: disallow trailing whitespaces. 2016-01-14 23:33:45 -08:00
project [SPARK-12667] Remove block manager's internal "external block store" API 2016-01-15 12:03:28 -08:00
python [SPARK-12575][SQL] Grammar parity with existing SQL parser 2016-01-15 15:19:10 -08:00
R [SPARK-11031][SPARKR] Method str() on a DataFrame 2016-01-15 07:37:54 -08:00
repl [SPARK-12761][CORE] Remove duplicated code 2016-01-13 11:53:59 -08:00
sbin [SPARK-12652][PYSPARK] Upgrade Py4J to 0.9.1 2016-01-12 14:27:05 -08:00
sbt Adde LICENSE Header to build/mvn, build/sbt and sbt/sbt 2014-12-29 10:48:53 -08:00
sql [SPARK-12575][SQL] Grammar parity with existing SQL parser 2016-01-15 15:19:10 -08:00
streaming [SPARK-12652][PYSPARK] Upgrade Py4J to 0.9.1 2016-01-12 14:27:05 -08:00
tags Bump master version to 2.0.0-SNAPSHOT. 2015-12-19 15:13:05 -08:00
tools [SPARK-4819] Remove Guava's "Optional" from public API 2016-01-08 13:02:30 -08:00
unsafe [SPARK-12575][SQL] Grammar parity with existing SQL parser 2016-01-15 15:19:10 -08:00
yarn [SPARK-12652][PYSPARK] Upgrade Py4J to 0.9.1 2016-01-12 14:27:05 -08:00
.gitattributes [SPARK-3870] EOL character enforcement 2014-10-31 12:39:52 -07:00
.gitignore [SPARK-12735] Consolidate & move spark-ec2 to AMPLab managed repository. 2016-01-09 20:28:20 -08:00
.rat-excludes [SPARK-12833][SQL] Initial import of spark-csv 2016-01-15 11:46:46 -08:00
checkstyle-suppressions.xml [SPARK-6990][BUILD] Add Java linting script; fix minor warnings 2015-12-04 12:03:45 -08:00
checkstyle.xml [SPARK-12830] Java style: disallow trailing whitespaces. 2016-01-14 23:33:45 -08:00
CONTRIBUTING.md [SPARK-6889] [DOCS] CONTRIBUTING.md updates to accompany contribution doc updates 2015-04-21 22:34:31 -07:00
LICENSE [SPARK-12652][PYSPARK] Upgrade Py4J to 0.9.1 2016-01-12 14:27:05 -08:00
make-distribution.sh [SPARK-12735] Consolidate & move spark-ec2 to AMPLab managed repository. 2016-01-09 20:28:20 -08:00
NOTICE [SPARK-12833][SQL] Initial import of spark-csv 2016-01-15 11:46:46 -08:00
pom.xml [SPARK-12269][STREAMING][KINESIS] Update aws-java-sdk version 2016-01-11 09:32:06 +00:00
pylintrc [SPARK-9116] [SQL] [PYSPARK] support Python only UDT in __main__ 2015-07-29 22:30:49 -07:00
README.md Add links howto to setup IDEs for developing spark 2015-12-04 14:43:16 +00:00
scalastyle-config.xml [SPARK-12692][BUILD] Enforce style checking about white space before comma 2016-01-13 00:51:24 -08:00
tox.ini [SPARK-7427] [PYSPARK] Make sharedParams match in Scala, Python 2015-05-10 19:18:32 -07:00

Apache Spark

Spark is a fast and general cluster computing system for Big Data. It provides high-level APIs in Scala, Java, Python, and R, and an optimized engine that supports general computation graphs for data analysis. It also supports a rich set of higher-level tools including Spark SQL for SQL and DataFrames, MLlib for machine learning, GraphX for graph processing, and Spark Streaming for stream processing.

http://spark.apache.org/

Online Documentation

You can find the latest Spark documentation, including a programming guide, on the project web page and project wiki. This README file only contains basic setup instructions.

Building Spark

Spark is built using Apache Maven. To build Spark and its example programs, run:

build/mvn -DskipTests clean package

(You do not need to do this if you downloaded a pre-built package.) More detailed documentation is available from the project site, at "Building Spark". For developing Spark using an IDE, see Eclipse and IntelliJ.

Interactive Scala Shell

The easiest way to start using Spark is through the Scala shell:

./bin/spark-shell

Try the following command, which should return 1000:

scala> sc.parallelize(1 to 1000).count()

Interactive Python Shell

Alternatively, if you prefer Python, you can use the Python shell:

./bin/pyspark

And run the following command, which should also return 1000:

>>> sc.parallelize(range(1000)).count()

Example Programs

Spark also comes with several sample programs in the examples directory. To run one of them, use ./bin/run-example <class> [params]. For example:

./bin/run-example SparkPi

will run the Pi example locally.

You can set the MASTER environment variable when running examples to submit examples to a cluster. This can be a mesos:// or spark:// URL, "yarn" to run on YARN, and "local" to run locally with one thread, or "local[N]" to run locally with N threads. You can also use an abbreviated class name if the class is in the examples package. For instance:

MASTER=spark://host:7077 ./bin/run-example SparkPi

Many of the example programs print usage help if no params are given.

Running Tests

Testing first requires building Spark. Once Spark is built, tests can be run using:

./dev/run-tests

Please see the guidance on how to run tests for a module, or individual tests.

A Note About Hadoop Versions

Spark uses the Hadoop core library to talk to HDFS and other Hadoop-supported storage systems. Because the protocols have changed in different versions of Hadoop, you must build Spark against the same version that your cluster runs.

Please refer to the build documentation at "Specifying the Hadoop Version" for detailed guidance on building for a particular distribution of Hadoop, including building for particular Hive and Hive Thriftserver distributions.

Configuration

Please refer to the Configuration Guide in the online documentation for an overview on how to configure Spark.