我有一個DataFrame
兩列:pyspark:結合數據幀的行成DenseVector
df = sqlContext.createDataFrame([
(1, 'a'), (2, 'a'),
(3, 'b'), (4, 'b'),
(5, 'c'), (6, 'c'),
(7, 'd'), (8, 'd'),
], schema=['value', 'name'])
編輯2017年1月13日: 我從基於實體 - 屬性 - 值SQL表得出這個數據幀模型。因此,每一行都會有一個額外的第三個實體列「id」。
我想根據ml
包的分類器的要求將其轉換爲「特徵」DataFrame
。對於單個列這可以通過使用可以實現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]))]
什麼是最有效的方式來value
列的值組合成基於一個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;
你是對的!該問題與基於實體 - 屬性 - 值模型處理SQL表有關。所以會有第三個實體專欄。我會相應地更新這個問題。 – mdh
'collect_list'就是我正在尋找的東西 – mdh