【问题标题】:How to explode one column of arrays to n column of single values [duplicate]如何将一列数组分解为n列单值[重复]
【发布时间】:2018-06-05 18:46:30
【问题描述】:

我是 Spark 的新手,我正在努力将一列 Array[Double] 转换为 n 列。比如我要转换这个

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

对此:

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

可能会应用我之前存储的原始schema。 我已经尝试过explode sql 实用程序,但它会将所有值分布在这样的单个列上

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

有没有办法在不使用 udfs 的情况下做到这一点?

任何帮助将不胜感激

【问题讨论】:

标签: apache-spark apache-spark-sql


【解决方案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()

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多