在SparkR中运行相关:没有用于将此S4类强制转换为向量的方法

时间:2015-11-08 21:38:23

标签: r apache-spark s4 sparkr

我最近开始使用SparkR并希望运行一些 相关分析。我可以将内容上传为 SparkR数据帧但它不允许运行简单的cor()分析 与数据框架。 (在下面得到S4错误):

usr/local/src/spark/spark-1.5.1/bin/sparkR --packages com.databricks:spark-csv_2.10:1.0.3
library(SparkR)

setwd('/DATA/')

Sys.setenv('SPARKR_SUBMIT_ARGS'='"--packages" "com.databricks:spark-csv_2.10:1.2.0" "sparkr-shell"')

sqlContext <- sparkRSQL.init(sc)

df <- read.df(sqlContext, "/DATA/GSE45291/GSE45291.csv", source = "com.databricks.spark.csv", inferSchema = "true")

results <- cor(as.data.matrix(df), type="pearson")
  

data.matrix(df)as.vector(data)中的错误:没有将此S4类强制转换为向量的方法

SparkR没有内置的关联功能吗?如何修复S4对象在R中工作,我可以执行基本功能?任何 人们对此表示赞赏。 谢谢 富

1 个答案:

答案 0 :(得分:2)

Spark&lt; 1.6

  

如何修复S4对象在R中工作,我可以执行基本功能?

你根本做不到。 Spark数据帧不是标准R data.frame的替代品。如果需要,您可以收集到本地R data.frame,但大多数情况下它不是一个可行的解决方案。

您可以使用UDF计算各列之间的相关性。首先,您需要一个Hive上下文:

sqlContext <- sparkRHive.init(sc)

和一些虚拟数据:

ldf <- iris[, -5]
colnames(ldf) <- tolower(gsub("\\.", "_", colnames(ldf)))
sdf <- createDataFrame(sqlContext, ldf)

接下来你必须注册临时表:

registerTempTable(sdf, "sdf")

现在您可以像这样使用SQL查询:

q <- sql(sqlContext, "SELECT corr(sepal_length, sepal_width) FROM sdf")
head(q)
##          _c0
## 1 -0.1175698

Spark&gt; = 1.6

您可以直接在cor上使用DataFrame功能。