DataFrame 查询方式
DataFrame支持两种查询方式,一种是DSL风格,另外一种是SQL风格
1、DSL风格:
你需要引入 import spark.implicit._ 这个隐式转换,可以将DataFrame隐式转换成RDD
2、SQL风格:
(1)、你需要将DataFrame注册成一张表格,如果你通过CreateTempView这种方式来创建,那么该表格Session有
效,如果你通过CreateGlobalTempView来创建,那么该表格Session有效,但是SQL语句访问该表格
的时候需要加上前缀 global_temp
(2)、你需要通过sparkSession.sql方法来运行你的SQL语句。
代码实现:
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.slf4j.LoggerFactory
import org.apache.log4j._
object HelloWorld {
val logger = LoggerFactory.getLogger(HelloWorld.getClass)
def main(args: Array[String]): Unit = {
Logger.getLogger("org").setLevel(Level.ERROR)
//创建SparkConf()并设置App名称
//创建sparkSession
val spark = SparkSession
.builder()
.appName("Spark SQL basic example")
.config("spark.some.config.option","some-value")
.getOrCreate()
//For implicit conversions like converting RDDs to DataFrame
//通过引入隐式转换可以将RDD的操作添加到DataFrame上
import spark.implicits._
//通过spark.read操作读取JSON数据
val df = spark.read.json("./sparkSQL/src/main/resources/people.json")
//Displays the content of the DataFrame to stdout
//show操作类似于Action,将DataFrame直接打印到Console。
df.show()
//DSL风格的使用方式中,属性的获取方法
df.filter($"age" > 21).show()
//将DataFrame注册为一张临时表
df.createOrReplaceTempView("persons")
//通过spark.sql方法来运行正常的SQL语句
spark.sql("select * from persons where age > 21").show()
//关闭整个SparkSession
spark.stop()
}
}