Spark能否直接将数据读入嵌套的案例类?

问题描述 投票:3回答:1

假设您有一个包含三列的CSV:itemusernameuserid。使用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]

scala apache-spark apache-spark-dataset
1个回答
4
投票

有没有办法跳过中间人并直接构建数据集[嵌套]?

没有 - Datasets符合结构和名称。您不能仅仅重塑名称和数据。

如果您更喜欢跳过Flat定义,请使用动态API

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

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

qazxsw poi并不真正打字,所以你不会丢失任何东西。

© www.soinside.com 2019 - 2024. All rights reserved.