【发布时间】:2016-04-16 16:32:00
【问题描述】:
我正在尝试使用 Scala 将包含大约 120 列的平面数据结构存储为 Spark 中的 Parquet 文件。 这就是我决定如何去做,需要一些建议或想法来做得更好,因为对我来说目前看起来有点笨拙。
- 根据数据创建案例类的逻辑隔离
- 创建一个包含上述所有案例类的复合案例类
- 使用 Spark explode 将复合列拆分为单个实体(看起来 spark explode 仅适用于 Seq/Array/List,因此我不得不在步骤 2 中将案例类元素存储为 Seq)
- 写入 Parquet。
有更好的想法吗?
【问题讨论】:
-
不确定你的意思,但爆炸应该适用于任何事情。在文档中的示例中,它们通过拆分为一个案例类数组来爆炸字符串。
-
例如case class Act(a:int, b:string, c:seq[string]), case class Boo(a1:int, b1:String) , case class C(a: Act, b: Boo)。所以现在如果我想将 C 元素 a 分解成三列(a:int, b:string, c:seq[string])而不是一个复合列 Act,该怎么做呢?
-
你的意思不是爆炸。 Explode 创建新行。您可以使用 select 语句将 StructType 列拆分为多个对。你可以做
select($"a.a", $"a.b", ...) -
我想我现在明白你在说什么了。谢谢!
标签: scala apache-spark parquet