MongoDB工具 >MongoDB Spark连接器 >Spark Connector Java指南 > 数据集和SQL
Dataset API提供了RDD的类型安全性和功能编程优势,以及DataFrame API的关系模型和性能优化。DataFrame
在Java API中不再以类的形式存在,因此Dataset<Row>
必须使用它来引用以后的DataFrame。
以下应用程序演示了如何Dataset
使用
隐式架构创建a Dataset
,使用显式架构创建a 以及如何在数据集上运行
SQL查询。
考虑一个名为的集合characters
:
要从MongoDB数据创建数据集,请通过加载数据
MongoSpark
并调用JavaMongoRDD.toDF()
方法。尽管
toDF()
听起来像是一种DataFrame
方法,但它是Dataset API的一部分,并返回Dataset<Row>
。
每当从MongoDB中读取数据并将其存储在中时,只要Dataset<Row>
不指定定义模式的
Java bean,就可以推断出数据集的模式。通过从数据库中采样文档来推断该模式。要显式声明一个模式,请参阅
显式声明一个模式。
以下操作从MongoDB加载数据,然后使用Dataset API创建数据集并推断模式:
implicitDS.printSchema()
将以下模式输出到控制台:
implicitDS.show()
将以下内容输出到控制台:
默认情况下,从MongoDB中读取内容SparkSession
是通过对集合中的文档进行采样来推断架构的。您还可以使用
来显式定义架构,从而消除采样所需的额外查询。Java bean
注意
如果为架构提供案例类,则MongoDB 仅返回声明的字段。这有助于最小化通过电线发送的数据。
以下语句创建一个,然后使用它为定义架构:Character
Java bean
DataFrame
Bean传递给方法以定义数据集的架构:toDS( Class<T> beanClass )
explicitDS.printSchema()
输出以下内容:
explicitDS.show()
输出以下内容:
在数据集上运行SQL查询之前,必须为数据集注册一个临时视图。
以下操作注册一个
characters
表,然后查询该表以查找所有100个或更旧的字符:
centenarians.show()
输出以下内容:
MongoDB Spark Connector提供了将DataFrames持久存储到MongoDB中的集合的功能。
以下操作将保存centenarians
到hundredClub
MongoDB 的集合中: