Tag: apache spark mllib

带有DataFrame API的Apache Spark MLlib在createDataFrame()或read()时会产生java.net.URISyntaxException .csv(…)

在一个独立的应用程序(运行在java8,Windows 10上,使用spark-xxx_2.11:2.0.0作为jar依赖项)下一代码会出错: /* this: */ Dataset logData = spark_session.createDataFrame(Arrays.asList( new LabeledPoint(1.0, Vectors.dense(4.9,3,1.4,0.2)), new LabeledPoint(1.0, Vectors.dense(4.7,3.2,1.3,0.2)) ), LabeledPoint.class); /* or this: */ /* logFile: “C:\files\project\file.csv”, “C:\\files\\project\\file.csv”, “C:/files/project/file.csv”, “file:/C:/files/project/file.csv”, “file:///C:/files/project/file.csv”, “/file.csv” */ Dataset logData = spark_session.read().csv(logFile); 例外: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:C:/files/project/spark-warehouse at org.apache.hadoop.fs.Path.initialize(Path.java:206) at org.apache.hadoop.fs.Path.(Path.java:172) at org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeQualifiedPath(SessionCatalog.scala:114) at org.apache.spark.sql.catalyst.catalog.SessionCatalog.createDatabase(SessionCatalog.scala:145) at org.apache.spark.sql.catalyst.catalog.SessionCatalog.(SessionCatalog.scala:89) at org.apache.spark.sql.internal.SessionState.catalog$lzycompute(SessionState.scala:95) […]

将JavaPairRDD转换为JavaRDD

我使用ElasticSearch-Hadoop Library从ElsticSearch获取数据。 JavaPairRDD<String, Map> esRDD = JavaEsSpark.esRDD(sc); 现在我有了JavaPairRDD。 我想在这个RDD上使用来自MLLib的随机森林。 所以我将它转换为JavaPairRDD.toRDD(esRDD)这将给我RDD。 使用RDD我再次转换为JavaRDD JavaRDD[] splits = (JavaRDD.fromRDD(JavaPairRDD.toRDD(esRDD), esRDD.classTag())).randomSplit(new double[] { 0.5, 0.5 }); JavaRDD trainingData = splits[0]; JavaRDD testData = splits[1]; 我想将trainingData和TestData传递给Random Forest算法,但它在编译时给出了转换exception。 类型不匹配:无法从JavaRDD [Tuple2 [String,Map [String,Object]]] []转换为JavaRDD [LabeledPoint] [] 添加方括号,小于和大于符号不起作用 任何人都可以建议我正确的铸造方式。 我是Spark Datastrucutres的新手。

管道中的Spark MLLib 2.0分类function

我正在尝试基于日志文件构建决策树。 某些function集很大,包含数千个唯一值。 我正在尝试在Java中使用管道和数据框架的新习惯用法。 我为每个分类function列构建了一个包含多个StringIndexer管道阶段的管道。 然后我使用VectorAssembler创建一个特征向量。 在VectorAssembler阶段之后,结果dataframe对我来说是完美的。 我的管道看起来很像 StringIndexer-> StringIndexer-> StringIndexer-> VectorAssembler-> DecisionTreeClassifier 但是我收到以下错误: DecisionTree要求maxBins(= 32)至少与每个分类要素中的值的数量一样大,但是分类要素5具有49个值。 考虑使用大量值删除此和其他分类function,或添加更多培训示例。 我可以通过使用规范化器解决此问题,但随后生成的决策树无法满足我的需求,因为我需要生成具有原始特征值的DSL决策树。 我无法手动设置maxBins,因为整个管道一起执行。 我希望结果决策树具有StringIndexer生成的值(例如,Feature 5 <= 132)。 此外,但不太重要,我希望能够为功能指定我自己的名称(例如,而不是'功能5',说'域')

在Spark MLlib上使用Java中的Breeze

在尝试使用Java中的MLlib时,使用breeze Matrix操作的正确方法是什么? 例如,对于例如scala中的乘法,它只是“ matrix * vector ”。 如何用Java表示相应的function? 有一些方法,如“ $colon$times ”,可以通过正确的方式调用 breeze.linalg.DenseMatrix matrix= … breeze.linalg.DenseVector vector = … matrix.$colon$times( … 一个人可能需要一个运算符实例… breeze.linalg.operators.OpMulMatrix.Impl2但是要使用哪个确切类型的Operation实例和参数?

如何使用apache spark的MLlib的线性回归?

我是apache spark的新手,从MLlib的文档中,我发现了一个scala的例子,但我真的不知道scala,有人知道java中的一个例子吗? 谢谢! 示例代码是 import org.apache.spark.mllib.regression.LinearRegressionWithSGD import org.apache.spark.mllib.regression.LabeledPoint // Load and parse the data val data = sc.textFile(“mllib/data/ridge-data/lpsa.data”) val parsedData = data.map { line => val parts = line.split(‘,’) LabeledPoint(parts(0).toDouble, parts(1).split(‘ ‘).map(x => x.toDouble).toArray) } // Building the model val numIterations = 20 val model = LinearRegressionWithSGD.train(parsedData, numIterations) // Evaluate model on training examples and […]

在Java中使用foreachActive for spark Vector

如何在Java中编写简单代码,迭代稀疏向量中的活动元素? 让我们说我们有这样的矢量: Vector sv = Vectors.sparse(3, new int[] {0, 2}, new double[] {1.0, 3.0}); 我尝试使用lambda或Function2(来自三个不同的导入但总是失败)。 如果您使用Function2,请提供必要的导入。

Java中Spark MLlib中的矩阵运算

这个问题是关于MLlib(Spark 1.2.1+)。 操作局部矩阵的最佳方法是什么(中等大小,低于100×100,因此不需要分发)。 例如,在计算数据集的SVD之后,我需要执行一些矩阵运算。 RowMatrix仅提供乘法function。 toBreeze方法返回一个DenseMatrix但API似乎不是Java友好的: public final That $plus(B b, UFunc.UImpl2 op) 在Spark + Java中,如何执行以下任何操作: 转置矩阵 加/减两个矩阵 裁剪矩阵 执行元素操作 等等 Javadoc RowMatrix: https ://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/linalg/distributed/RowMatrix.html RDD data = …; RowMatrix matrix = new RowMatrix(data); SingularValueDecomposition svd = matrix.computeSVD(15, true, 1e-9d); RowMatrix U = svd.U(); Vector s = svd.s(); Matrix V = svd.V(); //Example 1: How […]

apache spark MLLib:如何为字符串function构建标记点?

我正在尝试使用Spark的MLLib构建一个NaiveBayes分类器,它将一组文档作为输入。 我想把一些东西作为特征(即作者,显式标签,隐式关键字,类别),但看文档似乎LabeledPoint只包含双打,即看起来像LabeledPoint[Double, List[Pair[Double,Double]] 。 相反,我从其余代码输出的内容将类似于LabeledPoint[Double, List[Pair[String,Double]] 。 我可以编造自己的转换,但看起来很奇怪。 我怎么用MLLib来处理这个问题? 我相信答案是在HashingTF类中(即散列function),但我不明白它是如何工作的,它似乎需要某种容量值,但我的关键字和主题列表实际上是无限的(或更好,未知在开始)。

LogisticRegression的Spark MLLib TFIDF实现

我尝试使用火花1.1.0提供的新TFIDF算法。 我正在用Java编写MLLib的工作,但我无法弄清楚如何使TFIDF实现工作。 由于某种原因, IDFModel仅接受JavaRDD作为方法转换的输入而不是简单的Vector。 如何使用给定的类为我的LabledPoints建模TFIDF向量? 注意:文档行的格式为[标签; 文本] 到目前为止我的代码: // 1.) Load the documents JavaRDD data = sc.textFile(“/home/johnny/data.data.new”); // 2.) Hash all documents HashingTF tf = new HashingTF(); JavaRDD<Tuple2> tupleData = data.map(new Function<String, Tuple2>() { @Override public Tuple2 call(String v1) throws Exception { String[] data = v1.split(“;”); List myList = Arrays.asList(data[1].split(” “)); return new Tuple2(Double.parseDouble(data[0]), tf.transform(myList)); […]

如何将模型从ML Pipeline保存到S3或HDFS?

我正在努力保存ML Pipeline生产的数千种型号。 如此答案所示,模型可以保存如下: import java.io._ def saveModel(name: String, model: PipelineModel) = { val oos = new ObjectOutputStream(new FileOutputStream(s”/some/path/$name”)) oos.writeObject(model) oos.close } schools.zip(bySchoolArrayModels).foreach{ case (name, model) => saveModel(name, Model) } 我已经尝试使用s3://some/path/$name和/user/hadoop/some/path/$name因为我希望最终将模型保存到amazon s3,但它们都会失败,并显示路径不能是找到。 如何将模型保存到Amazon S3?