【发布时间】:2019-01-13 00:13:25
【问题描述】:
我还有其他问题要从这里https://stackoverflow.com/a/32557330/5235052 我正在尝试从数据框中构建 labeldPoints,其中我有列中的特征和标签。这些特征都是布尔值,带 1/0。
这是数据框中的示例行:
| 0| 0| 0| 0| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 1|
#Using the code from above answer,
#create a list of feature names from the column names of the dataframe
df_columns = []
for c in df.columns:
if c == 'is_item_return': continue
df_columns.append(c)
#using VectorAssembler for transformation, am using only first 4 columns names
assembler = VectorAssembler()
assembler.setInputCols(df_columns[0:5])
assembler.setOutputCol('features')
transformed = assembler.transform(df)
#mapping also from above link
from pyspark.mllib.regression import LabeledPoint
from pyspark.sql.functions import col
new_df = transformed.select(col('is_item_return'), col("features")).map(lambda row: LabeledPoint(row.is_item_return, row.features))
当我检查 RDD 的内容时,我得到了正确的标签,但特征向量是错误的。
(0.0,(5,[],[]))
有人可以帮助我理解,如何将现有数据框的列名作为特征名传递给 VectorAssembler?
【问题讨论】:
标签: python apache-spark apache-spark-sql apache-spark-ml