我有DataFrame
两列:
df = sqlContext.createDataFrame([
(1, 'a'), (2, 'a'),
(3, 'b'), (4, 'b'),
(5, 'c'), (6, 'c'),
(7, 'd'), (8, 'd'),
], schema=['value', 'name'])
编辑 2017/01/13:我从基于实体-属性-值模型的 SQL 表中派生出这个数据框。因此,每一行都可以使用额外的第三个实体列“id”。
我想将其转换为包DataFrame
分类器所需的“功能” ml
。对于单个列,这可以使用以下方法实现VectorAssembler
:
from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols=['value'], outputCol="features")
selected_features = assembler.transform(df).select('features')
selected_features.collect()
[Row(features=DenseVector([1.0])),
Row(features=DenseVector([2.0])),
Row(features=DenseVector([3.0])),
Row(features=DenseVector([4.0])),
Row(features=DenseVector([5.0])),
Row(features=DenseVector([6.0])),
Row(features=DenseVector([7.0])),
Row(features=DenseVector([8.0]))]
我想要的是这样的:
[Row(features=DenseVector([1.0, 2.0])),
Row(features=DenseVector([3.0, 4.0])),
Row(features=DenseVector([5.0, 6.0])),
Row(features=DenseVector([7.0, 8.0]))]
根据column 的值将 column 的值组合value
成 a的最有效方法是什么?DenseVector
name
例如,我正在考虑适用于GroupedData的自定义聚合函数groupby
:
df.groupby('name').vector_agg().collect()
类似于 PostgreSQL array_agg函数:
SELECT array_agg(df.value) FROM table as df
GROUP BY df.name;