【发布时间】:2019-07-12 02:39:29
【问题描述】:
我在 spark 中工作,为了使用 Jama library 的 Matrix 类,我需要将 spark.sql.DataFrame 的内容转换为二维数组,即 Array[Array[Double]]。
虽然我找到了很多 solutions 关于如何将数据框的单列转换为数组的信息,但我不明白如何
- 将整个数据帧转换为二维数组(即数组的数组);
- 同时,将其内容从 long 转换为 Double。
原因是我需要将数据帧的内容加载到 Jama 矩阵中,这需要一个二维数组作为输入:
val matrix_transport = new Matrix(df_transport)
<console>:83: error: type mismatch;
found : org.apache.spark.sql.DataFrame
(which expands to) org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
required: Array[Array[Double]]
val matrix_transport = new Matrix(df_transport)
编辑: 为了完整起见,df 模式是:
df_transport.printSchema
root
|-- 1_51501_19962: long (nullable = true)
|-- 1_51501_26708: long (nullable = true)
|-- 1_51501_36708: long (nullable = true)
|-- 1_51501_6708: long (nullable = true)
...
具有 165 列相同类型的 long。
【问题讨论】:
-
你的数据框的架构是什么?一般来说,您需要转换行,然后收集它们,因为 Jama 会期望您的数据都在驱动程序节点上,这可能会根据矩阵的大小给您带来问题。
-
所有列的类型都是
long (nullable = true)。大小应该不是问题,它是一个 165x165 的方阵。
标签: arrays apache-spark jama