我正在尝试使用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文件
答案 0 :(得分:1)
MLlib支持存储在单个机器上的局部向量和矩阵,以及由一个或多个RDD支持的分布式矩阵。局部向量和局部矩阵是用作公共接口的简单数据模型。底层线性代数操作由Breeze提供。在监督学习中使用的训练示例在MLlib中称为“标记点”。
您必须将数据转换为“标记点”,如果您提供列车数据的示例,我可以帮助您解决代码......