← 返回首页
DataFrame常见算子操作
发表时间:2023-10-25 00:39:01
DataFrame常见算子操作

DataFrame常见算子操作。

1.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也是支持的。