DataFrame常见算子操作。
DataFrame常见的算子操作如下:
下面来使用一下这些操作。 scala代码如下:
package com.simoniu.scalademo.sql
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
/**
* 需求:DataFrame常见操作
* Created by simoniu
*/
object DataFrameScalaDemo {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setMaster("local")
//创建SparkSession对象,里面包含SparkContext和SqlContext
val sparkSession = SparkSession.builder()
.appName("DataFrameOpScala")
.config(conf)
.getOrCreate()
val stuDf = sparkSession.read.json("D:\\uploadFiles\\students.json")
//打印schema信息
stuDf.printSchema()
//默认显示所有数据,可以通过参数控制显示多少条
stuDf.show(2)
//查询数据中的指定字段信息
stuDf.select("name","age").show()
//在使用select的时候可以对数据做一些操作,需要添加隐式转换函数,否则语法报错
import sparkSession.implicits._
stuDf.select($"name",$"age" + 1).show()
//对数据进行过滤,需要添加隐式转换函数,否则语法报错
stuDf.filter($"age">18).show()
//where底层调用的就是filter
stuDf.where($"age">18).show()
//对数据进行分组求和
stuDf.groupBy("gender").count().show()
sparkSession.stop()
}
}
java代码实现:
package com.simoniu.sparkdemo.javademo.sql;
import org.apache.spark.SparkConf;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
import static org.apache.spark.sql.functions.col;
/**
* 需求:DataFrame常见操作
* Created by simoniu
*/
public class DataFrameJavaDemo {
public static void main(String[] args) {
SparkConf conf = new SparkConf();
conf.setMaster("local");
//创建SparkSession对象,里面包含SparkContext和SqlContext
SparkSession sparkSession = SparkSession.builder()
.appName("DataFrameOpJava")
.config(conf)
.getOrCreate();
Dataset<Row> stuDf = sparkSession.read().json("D:\\uploadFiles\\students.json");
//打印schema信息
stuDf.printSchema();
//默认显示所有数据,可以通过参数控制显示多少条
stuDf.show(2);
//查询数据中的指定字段信息
stuDf.select("name","age").show();
//在select的时候可以对数据做一些操作,需要引入import static org.apache.spark.sql.functions.col;
stuDf.select(col("name"),col("age").plus(1)).show();
//对数据进行过滤
stuDf.filter(col("age").gt(18)).show();
stuDf.where(col("age").gt(18)).show();
//对数据进行分组求和
stuDf.groupBy("gender").count().show();
sparkSession.stop();
}
}
这种算子操作方式其实用起来还是不方便,只是提供了一些类似于可以操作表的算子,很对一些简单的查询还是可以的,但是针对一些复杂的操作,使用算子写起来就很麻烦了,所以我们希望能够直接支持用sql的方式执行,Spark SQL也是支持的。