假设您有一个包含三列的CSV:item
,username
和userid
。使用Spark的数据集API来读取它是一件相当简单的事情:
case class Flat(item: String, username: String, userid: String)
ds = sparkSession.read.csv("path/to/data").toDF("item", "username", "userid").as[Flat]
然后ds
将是Dataset[Flat]
类型。
但是假设您希望您的数据具有Dataset[Nested]
形式,其中Nested
由下式给出:
case class User(name: String, id: String)
case class Nested(item: String, user: User)
一种方法是将数据读入Dataset[Flat]
,然后应用map
将其转换为Dataset[Nested]
,但实际上Flat
案例类通常不需要其他任何东西,它会使代码不必要地冗长。有没有办法跳过中间人并直接构建一个Dataset[Nested]
?
有没有办法跳过中间人并直接构建数据集[嵌套]?
没有 - Datasets
符合结构和名称。您不能仅仅重塑名称和数据。
如果您更喜欢跳过Flat
定义,请使用动态API
import org.apache.spark.sql.functions._
ds.select($"item", struct($"name", $"id") as "user").as[Nested]
qazxsw poi并不真正打字,所以你不会丢失任何东西。