【问题标题】:Spark convert single column into arraySpark将单列转换为数组
【发布时间】:2016-11-10 14:27:04
【问题描述】:

如何将 spark 2.0.1 中的单列转换为数组?

+---+-----+
| id| dist| 
+---+-----+
|1.0|2.0|
|2.0|4.0|
|3.0|6.0|
|4.0|8.0|
+---+-----+

应该返回Array(1.0, 2.0, 3.0, 4.0)

一个

import scala.collection.JavaConverters._ 
df.select("id").collectAsList.asScala.toArray

失败

java.lang.RuntimeException: Unsupported array type: [Lorg.apache.spark.sql.Row;
java.lang.RuntimeException: Unsupported array type: [Lorg.apache.spark.sql.Row;

【问题讨论】:

标签: scala apache-spark apache-spark-sql


【解决方案1】:

如果您将 Java List 重新转换为 Scala List ,为什么还要使用 JavaConverters ?您只需要收集数据集,然后将这个 Rows 数组映射到一个双精度数组,如下所示:

df.select("id").collect.map(_.getDouble(0))

【讨论】:

  • collect() on dataframe 不是可扩展的方式。
  • 谁在这里谈到了可扩展性?
【解决方案2】:

我会尝试使用 dataframe aggregate function - collect_list() 进行类似的操作,以避免驱动程序 JVM 上的内存开销。使用这种方法只会将选定的列值复制到驱动程序 JVM

df.select(collect_list("id")).first().getList[Double](0)

这将返回java.util.List[Double]

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-07-16
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多