【问题标题】:Store about 120 Column based flat data structure to Spark Parquet Scala将大约 120 列基于平面数据结构存储到 Spark Parquet Scala
【发布时间】:2016-04-16 16:32:00
【问题描述】:

我正在尝试使用 Scala 将包含大约 120 列的平面数据结构存储为 Spark 中的 Parquet 文件。 这就是我决定如何去做,需要一些建议或想法来做得更好,因为对我来说目前看起来有点笨拙。

  1. 根据数据创建案例类的逻辑隔离
  2. 创建一个包含上述所有案例类的复合案例类
  3. 使用 Spark explode 将复合列拆分为单个实体(看起来 spark explode 仅适用于 Seq/Array/List,因此我不得不在步骤 2 中将案例类元素存储为 Seq)
  4. 写入 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


【解决方案1】:

你说的不是explode。 Explode 创建新行。您可以使用单个 select 语句将 StructType 列拆分为多个列。

像这样:

case class Act(a: Int, b: Seq[String])
case class Boo(a1: Int, b1: String)
case class C(a: Act, b: Boo)

val df = Seq(C(Act(1, Seq("test")), Boo(2, "this is"))).toDF

df.show
+--------------------+-----------+
|                   a|          b|
+--------------------+-----------+
|[1,WrappedArray(t...|[2,this is]|
+--------------------+-----------+

df.printSchema
root
 |-- a: struct (nullable = true)
 |    |-- a: integer (nullable = false)
 |    |-- b: array (nullable = true)
 |    |    |-- element: string (containsNull = true)
 |-- b: struct (nullable = true)
 |    |-- a1: integer (nullable = false)
 |    |-- b1: string (nullable = true)


df.select($"a", $"a.a", $"a.b", $"b", $"b.a1", $"b.b1").show
+--------------------+---+------+-----------+---+-------+
|                   a|  a|     b|          b| a1|     b1|
+--------------------+---+------+-----------+---+-------+
|[1,WrappedArray(t...|  1|[test]|[2,this is]|  2|this is|
+--------------------+---+------+-----------+---+-------+

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 2021-09-22
    • 1970-01-01
    • 2019-12-20
    • 2021-07-29
    • 2020-08-24
    • 1970-01-01
    • 2018-09-12
    • 2018-11-20
    相关资源
    最近更新 更多