getting started
SparkSession
Spark 中所有功能的入口是 SparkSession
类。要创建一个基本的SparkSession
对象, 只需要使用 SparkSession.builder():
1 | // scala |
1 | // java |
1 | # python |
创建 DataFrame
应用程序可以使用 SparkSession
从一个现有的 RDD
,Hive
表或 Spark
数据源创建 DataFrame
。下面基于一个 JSON
文件的内容创建一个 DataFrame
:
1 | val df = spark.read.json("examples/src/main/resources/people.json") //scala |
DataFrame 操作
DataFrame
为 Scala
,Java
, Python
以及 R
语言中的结构化数据操作提供了一种领域特定语言。
scala | java | python |
---|---|---|
df.printSchema() |
df.printSchema(); |
df.printSchema() |
df.select("name") |
df.select("name").show(); |
df.select("name").show(); |
df.select($"name", $"age" + 1).show() |
df.select(col("name"), col("age").plus(1)).show(); |
df.select(df['name'], df['age'] + 1).show() |
df.filter($"age" > 21).show() |
df.filter(col("age").gt(21)).show(); |
df.filter(df['age'] > 21).show() |
df.groupBy("age").count().show() |
df.groupBy("age").count().show() |
df.groupBy("age").count().show() |
1 | /************************** scala*************************/ |
1 | /************************** java*************************/ |
1 | ##################### python ################### |
SQL查询
通过SQL访问数据库,返回一个DataFrame的类型
1 | /*************************** scala *********************************/ |
1 | /*************************** java *********************************/ |
1 | ############################# python ############################### |
全局临时视图
Spark SQL中的临时视图是会话范围的,如果创建它的会话终止,它将消失。如果您希望拥有一个在所有会话之间共享的临时视图并保持活动状态,直到Spark应用程序终止,您可以创建一个全局临时视图。
1 | /********************************* scala *************************************/ |
1 | /********************************* java *************************************/ |
1 | ############################### python ################################ |
创建dataset
Dataset
是特定域对象中的强类型集合,它可以使用函数或者相关操作并行地进行转换等操作。每个Dataset
都有一个称为DataFrame
的非类型化的视图,这个视图是行的数据集。上面的定义看起来和RDD
的定义类似,DataSet
和RDD
主要的区别是:DataSet
是特定域的对象集合;然而RDD
是任何对象的集合。DataSet
的API
总是强类型的;而且可以利用这些模式进行优化,然而RDD
却不行。DataFrame
是特殊的Dataset
,它在编译时不会对模式进行检测。在未来版本的Spark,Dataset
将会替代RDD
成为我们开发编程使用的API
(注意,RDD
并不是会被取消,而是会作为底层的API
提供给用户使用)。
1 | // scala |
1 | // java |
与RDD互相转换
Spark SQL 支持两种不同的方法将RDDs 转换成 Datasets.
??????????????????????????????????????????
聚合函数
DataFrame可以使用聚合函数,例如count()、max()等
自定义聚合函数
使用UserDefinedAggregateFunction a
自定义聚合函数。
1 |