Spark可以直接将数据读入嵌套的case类吗?

假设您有一个包含三列的CSV:item,usernameuserid。它是利用星火的数据集API在读这一个相当简单的事情:Spark可以直接将数据读入嵌套的case类吗?

case class Flat(item: String, username: String, userid: String) 

ds = sparkSession.read.csv("path/to/data").toDF("item", "username", "userid").as[Flat]

然后dsDataset[Flat]类型。

但是,假设你希望你的数据有地方Nested由下式给出形式Dataset[Nested]

case class User(name: String, id: String) 

case class Nested(item: String, user: User)

一种方式做到这一点是将数据读入Dataset[Flat],然后应用map改造它变成Dataset[Nested],但实际上案例类通常不需要其他任何东西,并且它使得代码不必要地冗长。有没有办法跳过中间人并直接构造Dataset[Nested]

回答:

有什么办法可以跳过中间人,直接构造数据集[嵌套]?

有没有 - Datasets匹配的结构和名称。你不能只是重新设计名称和数据。

如果你喜欢跳过Flat定义只是使用动态API

import org.apache.spark.sql.functions._ 

ds.select($"item", struct($"name", $"id") as "user").as[Nested]

as[Flat]并没有真正类型检查,所以你不松任何事情。

以上是 Spark可以直接将数据读入嵌套的case类吗? 的全部内容, 来源链接: utcz.com/qa/260425.html

回到顶部