我正在尝试使用Scala将大约120列的平面数据结构存储为Spark中的Parquet文件。 这就是我决定如何去做,需要一些建议或想法来做得更好,对我而言,目前看起来有些笨拙。
想要做得更好吗?
答案 0 :(得分:1)
你不是指explode
。爆炸创建新行。您可以使用单个StructType
语句将select
列拆分为多个列。
像这样:
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|
+--------------------+---+------+-----------+---+-------+