Spark将单列转换为数组

时间:2016-11-10 14:27:04

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

如何将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)

A

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;

2 个答案:

答案 0 :(得分:2)

我会尝试用dataframe aggregate function - collect_list()这样的东西来避免驱动程序JVM上的内存开销。使用此方法仅将选定的列值复制到驱动程序JVM

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

返回java.util.List[Double]

答案 1 :(得分:0)

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

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