Pau*_*gel 5 scala apache-spark apache-spark-dataset
假设你有一个CSV有三列:item
,username
,和userid
。使用Spark的Dataset API读取以下内容非常简单:
case class Flat(item: String, username: String, userid: String)
ds = sparkSession.read.csv("path/to/data").toDF("item", "username", "userid").as[Flat]
Run Code Online (Sandbox Code Playgroud)
然后ds
将为类型Dataset[Flat]
。
但是,假设你希望你的数据有形式Dataset[Nested]
,其中Nested
由下式给出:
case class User(name: String, id: String)
case class Nested(item: String, user: User)
Run Code Online (Sandbox Code Playgroud)
一种实现方法是将数据读入a Dataset[Flat]
,然后应用a map
将其转换为a Dataset[Nested]
,但实际上,Flat
case类别通常不需要其他任何东西,并且它会使代码不必要地冗长。有什么方法可以跳过中间人并直接构造一个Dataset[Nested]
?
有什么办法可以跳过中间人,直接构造一个Dataset[Nested]?
没有 -Datasets
按结构和名称匹配。你不能只有名字,数据必须被重塑。
如果您喜欢跳过Flat
定义,请使用动态 API
import org.apache.spark.sql.functions._
ds.select($"item", struct($"name", $"id") as "user").as[Nested]
Run Code Online (Sandbox Code Playgroud)
as[Flat]
并没有真正键入检查,所以你不会丢失任何东西。
归档时间: |
|
查看次数: |
1484 次 |
最近记录: |