教程:
http://spark.apache.org/docs/latest/sql-programming-guide.html
Spark SQL是用于结构化数据处理的Spark模块。与基本的Spark RDD API不同,Spark SQL提供的接口为Spark提供了有关数据结构和正在执行的计算的更多信息。Spark SQL的一个用途是执行SQL查询。Spark SQL还可用于从现有Hive安装中读取数据。
SparkSession
Spark中所有功能的入口点都是SparkSession类。要创建基本的SparkSession,只需使用SparkSession.builder():
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.master("local")
.config("spark.some.config.option", "some-value")
.getOrCreate();
DataFrame
1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利
2、RDD不支持sparksql操作
3、DataFrame与Dataset均支持sparksql的操作,比如select,groupby之类,还能注册临时表/视窗,进行sql语句操作
4、在Java API中,用户需要使用Dataset来表示DataFrame
5、DataFrame与Dataset支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然
6、DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用上面提到的getAS方法或者模式匹配拿出特定字段
使用Dataset
Dataset<Row> df = spark.read().json("/Users/kexin/work/projects/TestSpark/src/main/resources/people.json");
df.show();
df.printSchema();
List list = df.filter(col("age").gt(18)).select("name","age").collectAsList();
list.forEach(row->{
System.out.print(((Row)row).get(0)+"\t");
System.out.