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