【问题标题】:scala map sequence of tuples to vectorscala 将元组序列映射到向量
【发布时间】:2017-01-05 12:04:00
【问题描述】:

我有一个类似的 spark 数据框

val df = Seq((1, 2), (2, 1), (1,2)).toDF()

当收集为val local = df.collect 时,结果为Array([1,2], [2,1], [1,2])

如何将其映射到 2 个单独的向量,例如

val col1: Seq(1,2,1)
val col2: Seq(2,1,2)

【问题讨论】:

  • 你试过unzip
  • 导致error: No implicit view available from org.apache.spark.sql.Row => (T1, T2).

标签: scala apache-spark collections


【解决方案1】:

要在收集之前拆分 - 您可以使用两个单独的select 操作:

val col1: Array[Int] = df.select("_1").as[Int].collect()
val col2: Array[Int] = df.select("_2").as[Int].collect()

但是 - 请注意,创建 df 的计算将被执行 两次,除非您将其持久化(例如,通过事先调用 df.cache())。

在收集后拆分

val arr = df.as[(Int, Int)].collect()
val (col1, col2) = arr.unzip

附言所有这些都假设您使用的是 Spark 1.6 或更高版本。

【讨论】:

  • 这就是第二个选项的作用 - 将两者收集为单个数组,然后将其拆分。您可以将其内联到df.as[(Int, Int)].collect().unzip
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 2020-05-25
  • 2016-02-10
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多