我是Spark的新手,我正在努力将Array [Double]列转换为n列。例如,我想转换此
+------------------+
| vector|
+------------------+
| [19.224, 46.9505]|
+------------------+
到此:
+-----------------+------------------+
| vector1| vector2|
+-----------------+------------------+
| 19.224| 46.9505|
+-----------------+------------------+
可能应用之前存储的原始schema
。
我已经尝试了explode
sql实用程序,但它将所有值传播到单个列上,如此
+------------------+
| vector3|
+------------------+
| 19.224|
| 46.9505|
+------------------+
有没有办法在不使用udfs的情况下执行此操作?
任何帮助将不胜感激
答案 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()