问题描述
我当前的数据框是这个。
+-------------------------------------------------------------------------------------+
|scores |
+-------------------------------------------------------------------------------------+
|[[1000,1234,4.6789],[2000,4.0],[3000,3.6789],[4000,2.6789]]|
+-------------------------------------------------------------------------------------+
我想将其转换为下面的列,其中列在2d scores数组中的索引分开。
+---------------------+---------------------+---------------------------+
|score 1 |score2 |score3 |
+---------------------+---------------------+---------------------------+
|[1000,2000,3000,4000]|[1234,1234]|[4.6789,4.0,3.6789,2.6789] |
+---------------------+---------------------+---------------------------+
解决方法
我已经分解了下面的必要步骤。
首先,我重新创建了您的数据,如下所示:
name
下一步将每个数组中的每个元素拆分为一列
email
然后,我们将每一列中的行收集为一个序列
recipientDefaults
最后,我们将数据转换为您要求的格式
val scores = spark.read.json(Seq("""{"scores": [[1000,1234,4.6789],[2000,4.0],[3000,3.6789],[4000,2.6789]]}""").toDS)
scores.select(explode($"scores").alias("scores")).show(false)
+------------------------+
|scores |
+------------------------+
|[1000.0,1234.0,4.6789]|
|[2000.0,4.0] |
|[3000.0,3.6789]|
|[4000.0,2.6789]|
+------------------------+