我最近开始使用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.mamatrix(df)as.vvector(data)中的错误:没有将该S4类强制为向量的方法
SparkR是否没有内置的相关函数?如何将S4对象固定为在R中工作,在R中我可以执行基本功能?任何感谢大家的建议。谢谢-富
Spark<1.6
如何将S4对象固定为在R中工作,在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
火花>=1.6
您可以直接在DataFrame
上使用cor
函数。