Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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
R 矩阵数学及其应用_R_Apache Spark_Apache Spark Mllib_Sparklyr - Fatal编程技术网

R 矩阵数学及其应用

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 <

希望将一些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 <- 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.x
o.a.s.ml
开始,算法不再接受本地
o.a.s.mllib

同时,R
向量
类型(
数值
整数
字符
)用作标量

注意

就我个人而言,我认为这不是一个好办法。Spark
linalg
软件包非常有限,并且在内部依赖于库,这些库无法通过
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