Geo*_*ler 7 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|
+---+-----+
Run Code Online (Sandbox Code Playgroud)
应该返回Array(1.0, 2.0, 3.0, 4.0)
A
import scala.collection.JavaConverters._
df.select("id").collectAsList.asScala.toArray
Run Code Online (Sandbox Code Playgroud)
失败了
java.lang.RuntimeException: Unsupported array type: [Lorg.apache.spark.sql.Row;
java.lang.RuntimeException: Unsupported array type: [Lorg.apache.spark.sql.Row;
Run Code Online (Sandbox Code Playgroud)
如果您将 Java 列表重新转换为 Scala 列表,为什么还要使用 JavaConverters 呢?您只需要收集数据集,然后将这个行数组映射到双精度数组,如下所示:
df.select("id").collect.map(_.getDouble(0))
Run Code Online (Sandbox Code Playgroud)
我会尝试使用数据帧聚合函数 -collect_list()来避免驱动程序 JVM 上的内存开销。通过这种方法,只有选定的列值才会被复制到驱动程序 JVM。
df.select(collect_list("id")).first().getList[Double](0)
Run Code Online (Sandbox Code Playgroud)
这样就返回了java.util.List[Double]。
| 归档时间: |
|
| 查看次数: |
20730 次 |
| 最近记录: |