PySpark:DataFrame到RDD [DenseVector]而不是RDD [Row]

时间:2018-06-05 09:27:33

标签: python apache-spark dataframe pyspark rdd

我有一个形式为:

的PySpark数据框
+--------------------+
|            col_name|
+--------------------+
|[val1, val2, val3]  |
|[val1, val2, val3]  |
+--------------------+

我想将其转换为矩阵形式的RDD,以便最终将其转换为RowMatrix。但是,当我使用df.rdd时,它会给我一个RDD,其中包含Row个对象,例如:

[Row(col_name=DenseVector([val1, val2, val3])),
Row(col_name=DenseVector([val1, val2, val3]))]

我如何解决这个问题,以便我的RDD只包含我的DenseVector个对象而不是Row个具有DenseVector s的对象,即形式为:< / p>

[DenseVector([val1, val2, val3]),
DenseVector([val1, val2, val3])]

如何实现?

1 个答案:

答案 0 :(得分:-2)

你可以使用:

df.rdd.map(row => <convert row to DenseVector>)
在scala中,您可以使用代码获取行中的列值:

row.getAs[Int](0)

其中Int 0是列的索引。 在scala中,DenseVector构造函数需要双精度数组,所以如果你有3个solumns,你可以做类似的事情

df.rdd.map(row => row.getAs[DenseVector](0))