Spark -9:Spark SQL, DataFrames and Datasets 编程指南
来源:互联网 发布:淘宝全球购关税怎么交 编辑:程序博客网 时间:2024/09/21 08:17
翻译:http://spark.apache.org/docs/latest/sql-programming-guide.html
概述
Spark SQL是用于结构化数据处理的Spark模块。与基本Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息来执行额外的优化。有几种方法与Spark SQL(包括SQL和Dataset API)进行交互。当计算结果时,使用相同的执行引擎,独立于您用来表达计算的API /语言。这种统一意味着开发人员可以容易地在不同的API之间来回切换,基于这些API提供了表达给定变换的最自然的方式。
此页面上的所有示例都使用Spark发行版中包含的示例数据,并且可以在spark-shell,pyspark shell或sparkR shell中运行。
SQL
Spark SQL的一个用途是执行SQL查询。 Spark SQL还可以用于从现有Hive安装中读取数据。有关如何配置此功能的更多信息,请参阅Hive表部分。当在另一种编程语言中运行SQL时,结果将作为Dataset / DataFrame返回。您还可以使用命令行或通过JDBC / ODBC与SQL界面交互。Datasets and DataFrames
Datasets是数据的分布式集合。数据集是在Spark 1.6中添加的一个新接口,它提供了RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化的执行引擎的优点。数据集可以从JVM对象构建,然后使用函数转换(map,flatMap,filter等)操作。Scala和Java中提供了Dataset API。Python没有对Dataset API的支持。但是由于Python的动态特性,Dataset API的许多优点已经可用(即,您可以通过名称自然地访问行的字段row.columnName)。R的情况是类似的。
DataFrame是组织成命名列的数据集。它在概念上等同于关系数据库中的表或R / Python中的数据框架,但具有更丰富的优化。DataFrames可以从各种来源构建,例如:结构化数据文件,Hive中的表,外部数据库或现有RDD。DataFrame API可用于Scala,Java,Python和R中。在Scala和Java中,DataFrame由Rows的Dataset表示。在Scala API中,DataFrame只是Dataset [Row]的类型别名。而在Java API中,用户需要使用Dataset <Row>来表示DataFrame。
Starting Point: SparkSession
Spark中所有功能的入口点是SparkSession类。要创建基本的SparkSession,只需使用SparkSession.builder():
import org.apache.spark.sql.SparkSession;SparkSession spark = SparkSession .builder() .appName("Java Spark SQL basic example") .config("spark.some.config.option", "some-value") .getOrCreate();
在Spark “examples / src / main / java / org / apache / spark / examples / sql / JavaSparkSQLExample.java”中查找完整的示例代码。Spark 2.0中的SparkSession为Hive功能提供了内置支持,包括使用HiveQL编写查询,访问Hive UDF以及从Hive表中读取数据的能力。要使用这些功能,您不需要具有现有的Hive设置。
Creating DataFrames
使用SparkSession,应用程序可以从现有RDD,Hive表或Spark数据源创建DataFrames。例如,以下内容根据JSON文件的内容创建DataFrame:
这里我们包括使用数据集的结构化数据处理的一些基本示例:
SparkSession上的sql函数使应用程序以编程方式运行SQL查询,并以数据集<Row>返回结果。
import org.apache.spark.sql.Dataset;import org.apache.spark.sql.Row;Dataset<Row> df = spark.read().json("examples/src/main/resources/people.json");// Displays the content of the DataFrame to stdoutdf.show();// +----+-------+// | age| name|// +----+-------+// |null|Michael|// | 30| Andy|// | 19| Justin|// +----+-------+DataFrames为Scala,Java,Python和R中的结构化数据操作提供了特定领域的语言。如上所述,在Spark 2.0中,DataFrames只是Scala和Java API中的Rows数据集。这些操作也称为“非类型转换”,与带有强类型化Scala / Java数据集的“类型转换”相反。
这里我们包括使用数据集的结构化数据处理的一些基本示例:
// col("...") is preferable to df.col("...")import static org.apache.spark.sql.functions.col;// Print the schema in a tree formatdf.printSchema();// root// |-- age: long (nullable = true)// |-- name: string (nullable = true)// Select only the "name" columndf.select("name").show();// +-------+// | name|// +-------+// |Michael|// | Andy|// | Justin|// +-------+// Select everybody, but increment the age by 1df.select(col("name"), col("age").plus(1)).show();// +-------+---------+// | name|(age + 1)|// +-------+---------+// |Michael| null|// | Andy| 31|// | Justin| 20|// +-------+---------+// Select people older than 21df.filter(col("age").gt(21)).show();// +---+----+// |age|name|// +---+----+// | 30|Andy|// +---+----+// Count people by agedf.groupBy("age").count().show();// +----+-----+// | age|count|// +----+-----+// | 19| 1|// |null| 1|// | 30| 1|// +----+-----+以编程方式运行SQL查询
SparkSession上的sql函数使应用程序以编程方式运行SQL查询,并以数据集<Row>返回结果。
port org.apache.spark.sql.Dataset;import org.apache.spark.sql.Row;// Register the DataFrame as a SQL temporary viewdf.createOrReplaceTempView("people");Dataset<Row> sqlDF = spark.sql("SELECT * FROM people");sqlDF.show();// +----+-------+// | age| name|// +----+-------+// |null|Michael|// | 30| Andy|// | 19| Justin|// +----+-------+
0 0
- Spark -9:Spark SQL, DataFrames and Datasets 编程指南
- 《Spark 官方文档》Spark SQL, DataFrames 以及 Datasets 编程指南
- 《Spark 官方文档》Spark SQL, DataFrames 以及 Datasets 编程指南
- Spark SQL, DataFrames 和 Datasets 指南
- Spark SQL, DataFrames and Datasets Guide
- Spark SQL, DataFrames and Datasets Guide
- Spark SQL, DataFrames and Datasets Guide
- pyspark-Spark SQL, DataFrames and Datasets Guide
- Spark SQL, DataFrames and Datasets Guide
- 【Spark 2.0官方文档】Spark SQL、DataFrames以及Datasets指南
- 学习spark:五、Spark SQL, DataFrames and Datasets Guide
- [Spark2.0]Spark SQL, DataFrames 和Datasets指南
- Spark SQL,DataFrames and DataSets Guide官方文档翻译
- Spark SQL and DataFrames
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
- Spark SQL and DataFrames Version 1.6
- spark sql 创建dataframes
- RDDs, DataFrames, and Datasets
- 一款很好用的图形图片库 CircleImageView
- linux环境ab网络压力测试工具
- Krajee DateRangePicker 1.6.7版不能自定义 range选项解决
- 卧槽2017
- Android 页面顶部状态栏隐藏和透明
- Spark -9:Spark SQL, DataFrames and Datasets 编程指南
- mysql 复合索引
- python题目-----lambda函数
- Sublime Text安装和常用的插件总结
- Soo 防环机制, 在配置了之后如果show 出来还是没有生效,建议clear 一下bgp,最好实验就是 把 物理接口给 shutdown--在no shutdown ,就好了,记住,!!!
- 2017.1.19日测试题解
- Win7 U盘安装Ubuntu16.04 双系统详细教程
- android项目组件化
- 文章标题