Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当DataFrame有列时,如何使用Java Apache Spark MLlib?_Java_Apache Spark_Machine Learning_Apache Spark Mllib - Fatal编程技术网

当DataFrame有列时,如何使用Java Apache Spark MLlib?

当DataFrame有列时,如何使用Java Apache Spark MLlib?,java,apache-spark,machine-learning,apache-spark-mllib,Java,Apache Spark,Machine Learning,Apache Spark Mllib,所以我是Apache Spark的新手,我有一个文件如下所示: Name Size Records File1 1,000 104,370 File2 950 91,780 File3 1,500 109,123 File4 2,170 113,888 File5 2,000 111,974 File6 1,820 110,666 File7 1,200 106,771 File8 1,500

所以我是Apache Spark的新手,我有一个文件如下所示:

Name     Size    Records 
File1    1,000   104,370 
File2    950     91,780 
File3    1,500   109,123 
File4    2,170   113,888
File5    2,000   111,974
File6    1,820   110,666
File7    1,200   106,771 
File8    1,500   108,991 
File9    1,000   104,007
File10   1,300   107,037
File11   1,900   111,109
File12   1,430   108,051
File13   1,780   110,006
File14   2,010   114,449
File15   2,017   114,889
这是我的样品/测试数据。我正在开发一个异常检测程序,我必须测试具有相同格式但不同值的其他文件,并检测哪些文件在大小和记录值上存在异常(如果另一个文件上的大小/记录与标准文件有很大差异,或者如果大小和记录之间不成比例)。我决定开始尝试不同的ML算法,我想从k-Means方法开始。我尝试将此文件放在以下行:

KMeansModel model = kmeans.fit(file)
文件已解析为数据集变量。但是我得到了一个错误,我很确定这与文件的结构/模式有关。在尝试适应模型时,是否有一种处理结构化/标记化/组织化数据的方法

我得到以下错误:线程“main”java.lang.IllegalArgumentException:字段“features”中的异常不存在

这是代码:

public class practice {

public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("Anomaly Detection").setMaster("local");
    JavaSparkContext sc = new JavaSparkContext(conf);

    SparkSession spark = SparkSession
              .builder()
              .appName("Anomaly Detection")
              .getOrCreate();

String day1 = "C:\\Users\\ZK0GJXO\\Documents\\day1.txt";

    Dataset<Row> df = spark.read().
            option("header", "true").
            option("delimiter", "\t").
            csv(day1);
    df.show();
    KMeans kmeans = new KMeans().setK(2).setSeed(1L);
    KMeansModel model = kmeans.fit(df);
}
公共课堂实践{
公共静态void main(字符串[]args){
SparkConf conf=new SparkConf().setAppName(“异常检测”).setMaster(“本地”);
JavaSparkContext sc=新的JavaSparkContext(conf);
火花会话火花=火花会话
.builder()
.appName(“异常检测”)
.getOrCreate();
String day1=“C:\\Users\\ZK0GJXO\\Documents\\day1.txt”;
数据集df=spark.read()。
选项(“标题”、“真”)。
选项(“分隔符”、“\t”)。
csv(第1天);
df.show();
KMeans KMeans=new KMeans().setK(2).setSeed(1L);
KMeansModel模型=kmeans.fit(df);
}
}


谢谢

默认情况下,所有Spark ML型号都列在一个名为“功能”的列上。可以通过setFeaturesCol方法指定不同的输入列名

更新:

可以使用VectorAssembler将多个列组合成单个特征向量:

VectorAssembler assembler = new VectorAssembler()
.setInputCols(new String[]{"size", "records"})
.setOutputCol("features");

 Dataset<Row> vectorized_df = assembler.transform(df)

 KMeans kmeans = new KMeans().setK(2).setSeed(1L);
 KMeansModel model = kmeans.fit(vectorized_df);
VectorAssembler-assembler=新的VectorAssembler()
.setInputCols(新字符串[]{“大小”,“记录”})
.setOutputCol(“特征”);
数据集矢量化_df=assembler.transform(df)
KMeans KMeans=new KMeans().setK(2).setSeed(1L);
KMeansModel model=kmeans.fit(矢量化的_-df);

您可以使用管道API进一步简化和链接这些特征转换

Wait,这意味着它们将只在一列上进行训练,而忽略其余列?要在多列上进行训练,您可以使用VectorAssembler创建特征向量,如中所述