我最近开始使用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中工作,我可以执行基本功能?任何 人们对此表示赞赏。 谢谢 富
答案 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
功能。