SparkSQL-入门

一、创建SparkSession

Spark SQL中所有功能的入口点是SparkSession类。可以使用SparkSession.builder()直接创建一个SparkSession:

import org.apache.spark.sql.SparkSession;

SparkSession spark = SparkSession
  .builder()
  .appName("Java Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate();

Spark 2.0 中,SparkSession 为 Hive 特性提供了内嵌的支持,包括使用 HiveQL 查询, 访问 Hive UDF,以及从 Hive 表中读取数据。

二、创建DataFrames

通过SparkSession,应用程序可以通过一个已经存在的RDD,Hive表,或者是Spark数据源创建DataFrams。下面以读取Json文件为例:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

Dataset<Row> df = spark.read().json("examples/src/main/resources/people.json");

// Displays the content of the DataFrame to stdout
df.show();
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+

三、无类型的Dataset操作

我们知道 DataFrames在Scala 和 Java API中,它仅仅是多个 Rows的Dataset。这些操作也参考了与强类型的Scala/Java Datasets中的”类型转换” 对应的”无类型转换” 。

下面使用 Dataset 进行结构化数据处理的示例:

// col("...") is preferable to df.col("...")
import static org.apache.spark.sql.functions.col;

// Print the schema in a tree format
df.printSchema();
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)

// Select only the "name" column
df.select("name").show();
// +-------+
// |   name|
// +-------+
// |Michael|
// |   Andy|
// | Justin|
// +-------+

// Select everybody, but increment the age by 1
df.select(col("name"), col("age").plus(1)).show();
// +-------+---------+
// |   name|(age + 1)|
// +-------+---------+
// |Michael|     null|
// |   Andy|       31|
// | Justin|       20|
// +-------+---------+

// Select people older than 21
df.filter(col("age").gt(21)).show();
// +---+----+
// |age|name|
// +---+----+
// | 30|Andy|
// +---+----+

// Count people by age
df.groupBy("age").count().show();
// +----+-----+
// | age|count|
// +----+-----+
// |  19|    1|
// |null|    1|
// |  30|    1|
// +----+-----+

DataFrame 执行操作的完整API可以参考 API 文档

除了简单的列引用和表达式之外,DataFrame 也有丰富的函数库,比如 string 操作,date 算术,常见的 math 操作等等。完整API请参考  DataFrame 函数指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值