Spark将单列转换为数组

Posted

技术标签:

【中文标题】Spark将单列转换为数组【英文标题】:Spark convert single column into array 【发布时间】: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;

【问题讨论】:

Spark Dataframe groupby with agg performing list appending的可能重复 【参考方案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]

【讨论】:

以上是关于Spark将单列转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将嵌套的 np.array 转换为 pandas 数据框单列

Spark 2 将 scala 数组转换为 WrappedArray

将字节数组转换为字符串 spark

将特征的 Spark 向量转换为数组

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

在 Python 中将一个热编码结果转换回单列