sparksesion java_SparkSession:新的切入点

在, SQLContext和HiveContext之间关系的问题。当人们想使用DataFrame API的时候把HiveContext当做切入点的确有点奇怪。在

本文是使用Scala编写的,但是Python和Java中同样可用。

Creating a SparkSession

SparkSession可以通过建造者模式创建。如果SparkContext存在,那么SparkSession将会重用它;但是如果SparkContext不存在,则创建它。在build上设置的参数将会自动地传递到Spark和Hadoop中。 > // A SparkSession can be created using a builder pattern

import org.apache.spark.sql.SparkSession

val sparkSession = SparkSession.builder

.master("local")

.appName("my-spark-app")

.config("spark.some.config.option", "config-value")

.getOrCreate()

import org.apache.spark.sql.SparkSession

sparkSession: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@46d6b87c

在Databricks notebooks 和Spark REPL中,SparkSession实例会被自动创建,名字是spark,如下: > spark

res9: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@46d6b87c

Unified entry point for reading data

SparkSession是数据读取的切入点,和之前SQLContext读取数据的方式类似: > val jsonData = spark.read.json("/home/webinar/person.json")

jsonData: org.apache.spark.sql.DataFrame = [email: string, iq: bigint ... 1 more field]

> display(jsonData)emailiqname

matei@databricks.com180Matei Zaharia

rxin@databricks.com80Reynold Xin

Running SQL queries

SparkSession可以在数据上运行SQL查询,并且将结果作为DataFrame返回(比如 Dataset[Row]) > display(spark.sql("select * from person"))emailiqname

matei@databricks.com180Matei Zaharia

rxin@databricks.com80Reynold Xin

Working with config options

SparkSession可以在运行时设置一些参数,这些参数可以触发性能优化,或者I/O行为: > spark.conf.set("spark.some.config", "abcd")

res12: org.apache.spark.sql.RuntimeConfig = org.apache.spark.sql.RuntimeConfig@55d93752

> spark.conf.get("spark.some.config")

res13: String = abcd

我们还可以在sql中通过变量替换来传递配置 > %sql select "${spark.some.config}"abcd

abcd

Working with metadata directly

SparkSession中还包含了catalog方法,可以使用它来和metastore打交道,结果返回类型是DataSet,所有你可以直接在上面使用DataSet的方法。 > // To get a list of tables in the current database

val tables = spark.catalog.listTables()

tables: org.apache.spark.sql.Dataset[org.apache.spark.sql.catalog.Table] = [name: string, database: string ... 3 more fields]

> display(tables)namedatabasedescriptiontableTypeisTemporary

persondefaultnullMANAGEDfalse

smartdefaultnullMANAGEDfalse

> // Use the Dataset API to filter on names

display(tables.filter(_.name contains "son"))

namedatabasedescriptiontableTypeisTemporary

persondefaultnullMANAGEDfalse

> // Get the list of columns for a table

display(spark.catalog.listColumns("smart"))

namedatabasedataTypenullableisPartitionisBucket

emailnullstringtruefalsefalse

iqnullbiginttruefalsefalse

namenullstringtruefalsefalse

Access to the underlying SparkContext

SparkSession.sparkContext方法将会返回内置的SparkContext,可以使用它创建RDD或者是管理集群资源: > spark.sparkContext

res17: org.apache.spark.SparkContext = org.apache.spark.SparkContext@2debe9ac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值