如何将一列数组分解为n列单个值

时间:2018-06-05 10:20:19

标签: apache-spark apache-spark-sql

我是Spark的新手,我正在努力将Array [Double]列转换为n列。例如,我想转换此

+------------------+
|            vector|
+------------------+
| [19.224, 46.9505]|
+------------------+

到此:

+-----------------+------------------+
|          vector1|           vector2|
+-----------------+------------------+
|           19.224|           46.9505|
+-----------------+------------------+

可能应用之前存储的原始schema。 我已经尝试了explode sql实用程序,但它将所有值传播到单个列上,如此

+------------------+
|           vector3|
+------------------+
|            19.224|
|           46.9505|
+------------------+

有没有办法在不使用udfs的情况下执行此操作?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

你可以这样做:

df
  .select(
    $"vector"(0).as("vector1"),
    $"vector"(1).as("vector2")
  )
  .show()

+-------+-------+
|vector1|vector2|
+-------+-------+
| 19.224|46.9505|
+-------+-------+

或更通用:

val N = 2

val selectExpr = (0 until N).map(i=> $"vector"(i).as(s"vector${i+1}"))

df
  .select(selectExpr:_*)
  .show()