scala 在Spark中将嵌套的对象列表分解为DataFrame

mm9b1k5b  于 7个月前  发布在  Scala
关注(0)|答案(1)|浏览(90)

我有一个像这样的框架

|               Column                           |
|------------------------------------------------|
|[{a: 2, b: 4}, {a: 2, b: 3}]                    |
|------------------------------------------------|
|[{a: 12, b: 14}, {a: 25, b: 33}, {a: 22, b: 31}]|
...

字符串
我需要把它转换成一个类似于

| a | b |
|---|---|
| 2 | 4 |
| 2 | 3 |
|12 |13 |

bq3bfh9z

bq3bfh9z1#

最简单的方法可能是使用SparkSQL函数inline,如下所示:

case class AB(a: Int, b: Int)

val df = Seq(
    Seq(AB(2, 4), AB(2,3)),
    Seq(AB(12, 14), AB(25, 33), AB(22, 31))
  ).toDF("arrAB")

df.select(inline($"arrAB")).show
/*
+---+---+
|  a|  b|
+---+---+
|  2|  4|
|  2|  3|
| 12| 14|
| 25| 33|
| 22| 31|
+---+---+
*/

字符串
请注意,虽然inline2.0以来一直是SparkSQL API的一部分,但它仅在Spark 3.4+上作为DataFrame的内置函数可用。要在旧版Spark上使用它,请像下面这样用expr Package 它:

df.select(expr("inline(arrAB)"))

相关问题