sparkSQL之DataFrame创建

1、 SparkSession

是SQLContext和HiveContext的组合; 为了向后兼容,所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。

SparkSession内部封装了sparkContext、SparkConf、SQLContext,所以计算实际上是由sparkContext完成的。

 ---- 为用户提供一个统一的切入点使用Spark 各项功能

 ---- 允许用户通过它调用 DataFrame 和 Dataset 相关 API 来编写程序

 --- 与 Spark 交互之时不需要显示的创建 SparkConf, SparkContext 以及 SQlContext,这些对象已经封闭在 SparkSession 中

2、创建DataFrame的方式

方式一:sparkSQL之数据源读取parquet、json、csv案例。

方式二:通过 structType 创建 DataFrames(编程接口)。createDataFrame的方法创建

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, SparkSession}
object TestSparkSql {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("SparkSql").setMaster("local[*]")
    val sc: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
    // 将本地的数据读入 RDD
    val peopleRdd = sc.sparkContext.textFile("file:\\F:\\Input")
    // 将 RDD 数据映射成 Row,需要 import org.apache.spark.sql.Row
    import org.apache.spark.sql.Row
    val rowRDD: RDD[Row] = peopleRdd.map(line => {
      val fields = line.split(",")
      Row(fields(0), fields(1).trim.toInt)
    })
    val structType: StructType = StructType(
      //字段名,字段类型,是否可以为空
      StructField("name", StringType, true) ::
        StructField("age", IntegerType, true) :: Nil
    )

    //将DataFrames创建成一个临时的视图
    val df: DataFrame = sc.createDataFrame(rowRDD,structType)

    df.createTempView("people")
    sc.sql("select * from people").show() //使用SQL语句进行查询
    sc.stop()
  }
}

方式三:通过 case class 创建 DataFrames(反射)。通过 case classRDD转化成DataFrame

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

//定义case class,相当于表结构
case class People(var name: String, var age: Int)

object TestSparkSql {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setAppName("SparkSql").setMaster("local[*]")
    val sc: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
    // 将本地的数据读入 RDD, 并将 RDD 与 case class 关联
    val peopleRdd = sc.sparkContext.textFile("file:\\F:\\Input\\people.txt")
      .map(line => People(line.split(",")(0),line.split(",")(1).trim.toInt))
    import sc.implicits._
    // 将RDD 转换成 DataFrames
    val df: DataFrame = peopleRdd.toDF
    //将DataFrames创建成一个临时的视图
    df.createOrReplaceTempView("people")
    sc.sql("select * from people").show() //使用SQL语句进行查询
    sc.stop()
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值