Spark:jdbc数据集<row>上的朴素贝叶斯

时间:2016-08-11 15:12:16

标签: java mysql jdbc apache-spark apache-spark-mllib

我正在尝试使用Spark的MLLib朴素贝叶斯算法进行一些预测。不幸的是我无法做到这一点'因为显然算法使用“libsvm”格式(标签标签:功能),我无法从我的数据集中获取。我正在研究Java,我从MySQL数据库中获取数据......这是我正在使用的代码:

public class SparkML {
    public static void main(String[] args) throws IOException {

        //This two lines hide spark logs
        Logger.getLogger("org").setLevel(Level.ERROR);
        Logger.getLogger("akka").setLevel(Level.ERROR);

        //Here I create the spark session
        SparkSession spark = SparkSession.builder().appName("Test").config("spark.master", "local[*]").getOrCreate();

        // This three lines take care of DB connection   
        Properties dbProperties = new Properties();
        dbProperties.load(new FileInputStream(new File("properties.flat")));
        String jdbcUrl = dbProperties.getProperty("jdbcUrl");

        // Retrieving training data
        String table = "spark_tests.sparkTrainData";
        Dataset<Row> train = spark.read().jdbc(jdbcUrl, table, dbProperties);

        // Retrieving test data    
        table = "spark_tests.sparkTrainData";
        Dataset<Row> test = spark.read().jdbc(jdbcUrl, table, dbProperties);

        NaiveBayes nb = new NaiveBayes();
        NaiveBayesModel model = nb.fit(train); //When executing this, I get "java.lang.IllegalArgumentException: Field "features" does not exist."    
    }
}

关于如何实现这一目标的任何想法?或者,如果有另一种方法可以做到这一点?我已经检查了Spark的API,Spark的教程,它们只能使用* .txt文件

1 个答案:

答案 0 :(得分:1)

  

MLlib支持存储在单个机器上的局部向量和矩阵,以及由一个或多个RDD支持的分布式矩阵。局部向量和局部矩阵是用作公共接口的简单数据模型。底层线性代数操作由Breeze提供。在监督学习中使用的训练示例在MLlib中称为“标记点”。

From Spark MLlib Guide

您必须将数据转换为“标记点”,如果您提供列车数据的示例,我可以帮助您解决代码......