R 矩阵数学及其应用
希望将一些R代码转换为SparkyR,函数如lmtest::coeftest()和sandwich::sandwich()。尝试开始使用SparkyR扩展,但对Spark API来说非常陌生,并且存在以下问题:( 运行火花2.1.1和火花0.5.5-9002 感觉第一步是使用linalg库创建对象:R 矩阵数学及其应用,r,apache-spark,apache-spark-mllib,sparklyr,R,Apache Spark,Apache Spark Mllib,Sparklyr,希望将一些R代码转换为SparkyR,函数如lmtest::coeftest()和sandwich::sandwich()。尝试开始使用SparkyR扩展,但对Spark API来说非常陌生,并且存在以下问题:( 运行火花2.1.1和火花0.5.5-9002 感觉第一步是使用linalg库创建对象: library(sparklyr) library(dplyr) sc <- spark_connect("local") rows <- as.integer(2) cols <
library(sparklyr)
library(dplyr)
sc <- spark_connect("local")
rows <- as.integer(2)
cols <- as.integer(2)
array <- c(1,2,3,4)
mat <- invoke_new(sc, "org.apache.spark.mllib.linalg.DenseMatrix",
rows, cols, array)
好的,我得到了一个java lang异常,我非常确定行
和列
参数在构造函数中是正确的,但不确定最后一个,它应该是java数组
。因此我尝试了以下几种排列:
array <- invoke_new(sc, "java.util.Arrays", c(1,2,3,4))
我觉得我错过了一些非常基本的东西。有人知道发生了什么吗?R Java
数组的对应物是列表
:
invoke_new(
sc, "org.apache.spark.ml.linalg.DenseMatrix",
2L, 2L, list(1, 2, 3, 4))
## <jobj[17]>
## class org.apache.spark.ml.linalg.DenseMatrix
## 1.0 3.0
## 2.0 4.0
invoke\u new(
sc,“org.apache.spark.ml.linalg.DenseMatrix”,
2L,2L,列表(1,2,3,4))
##
##类org.apache.spark.ml.linalg.DenseMatrix
## 1.0 3.0
## 2.0 4.0
或
invoke\u static(
sc,“org.apache.spark.ml.linalg.matrix”,“稠密”,
2L,2L,列表(1,2,3,4))
##
##类org.apache.spark.ml.linalg.DenseMatrix
## 1.0 3.0
## 2.0 4.0
请注意,我使用的是o.a.s.ml.linalg
而不是o.a.s.mllib.linalg
。而mllib
将独立工作,从Spark 2.xo.a.s.ml
开始,算法不再接受本地o.a.s.mllib
同时,R向量
类型(数值
,整数
,字符
)用作标量
注意:
就我个人而言,我认为这不是一个好办法。Sparklinalg
软件包非常有限,并且在内部依赖于库,这些库无法通过SparkyR
使用。此外,SparkyR
API不适用于复杂的逻辑
实际上,使用一个精简的、对R友好的包装器实现Java或Scala扩展更有意义。关于您的说明,您知道制作这些扩展的任何资源吗?还有说明如何从R调用自定义扩展的指南吗?对不起,我没有。当然有,但我认为它没有那么有用。总的来说,我认为这是一个e关于API设计。SparkR API是一个很好的例子-在Scala中实现了大量逻辑和精简的R友好适配器。我非常感谢您的评论。看起来我们将要进行Scala编程。我知道我们需要rank
线性代数方法,而linalg
没有。是的,如果您需要适当的线性代数方法我会直接去gebra库。如果你使用NumPy或Matlab,设计应该足够熟悉,而且它已经是Spark的一个依赖项。
Error: java.lang.Exception: No matched constructor found for class java.util.Arrays
invoke_new(
sc, "org.apache.spark.ml.linalg.DenseMatrix",
2L, 2L, list(1, 2, 3, 4))
## <jobj[17]>
## class org.apache.spark.ml.linalg.DenseMatrix
## 1.0 3.0
## 2.0 4.0
invoke_static(
sc, "org.apache.spark.ml.linalg.Matrices", "dense",
2L, 2L, list(1, 2, 3, 4))
## <jobj[19]>
## class org.apache.spark.ml.linalg.DenseMatrix
## 1.0 3.0
## 2.0 4.0