2016-09-15 59 views
0

SparkML梯度推进分类器鉴于以下RDD如何培养给予RDD

training_rdd = rdd.select(
    # Categorical features 
    col('device_os'), # 'ios', 'android' 

    # Numeric features 
    col('30day_click_count'), 
    col('30day_impression_count'), 
    np.true_divide(col('30day_click_count'), col('30day_impression_count')).alias('30day_click_through_rate'), 

    # label 
    col('did_click').alias('label') 
) 

我感到困惑的语法训练梯度推进分类器。

我正在学习本教程。 https://spark.apache.org/docs/latest/ml-classification-regression.html#gradient-boosted-tree-classifier

但是,我不确定如何将我的4个特征列放入向量中。因为VectorIndexer假定所有功能都已在一列中。

+0

链接教程假设一个'DataFrame',而不是一个'RDD'虽然。 – mtoto

回答

0

您可以使用VectorAssembler来生成特征向量。请注意,您必须先将rdd转换为DataFrame

from pyspark.ml.feature import VectorAssembler 
vectorizer = VectorAssembler() 

vectorizer.setInputCols(["device_os", 
         "30day_click_count", 
         "30day_impression_count", 
         "30day_click_through_rate"]) 

vectorizer.setOutputCol("features") 

啥都,你将需要把vectorizer为第一阶段为Pipeline

pipeline = Pipeline([vectorizer, ...]) 
+0

如果我将RDD转换为数据帧,是否意味着它必须被评估?我的数据集太大而不适合内存 – samol

+0

Spark DataFrame仍然是一个分布式数据集。你可以通过'rdd.toDF()'来完成。 – mtoto