当使用sparkR处理数据时,程序真正运行的地方在哪里?

时间:2016-09-23 05:34:12

标签: r apache-spark sparkr

我是spark和sparkR的新手,我的问题如下: 当我写下面的代码时: 1)。设置环境并启动spark.session()

sparkR.session(master = "my/spark/master/on/one/server/standaloneMode",  , sparkConfig = list(spark.driver.memory="4g",spark.sql.warehouse.dir = "my/hadoop_home/bin",sparkPackages = "com.databricks:spark-avro_2.11:3.0.1"))

然后我写道:

rund <- data.frame(V1 = runif(10000000,100,10000),V2 =runif(10000000,100,10000))
df <- as.DataFrame(rund)

事情就是这样:

1)。程序在哪里进行“分裂”?在我的本地机器或服务器上?

2)。此外,谁能告诉我程序在哪里运行代码&#34; as.DataFrame()&#34;?在我的计算机或我的服务器上设置为spark的standalone_mode。

1 个答案:

答案 0 :(得分:0)

SparkR 是Spark的界面。这意味着SparkR包中的某些R函数被重写,以提供您从R中已经知道的类似用户体验。您可能应该查看文档以查看哪些Spark函数可用:{{ 3}}

这些功能通常会提取您可以创建的 SparkDataFrames ,例如使用as.DataFrame功能。 SparkDataFrames提供对Spark群集中SparkDataFrame的引用。

在您的示例中,您创建了一个本地 R数据框rundrunif函数也在R实例中执行本地

# executed in your local R instance
rund <- data.frame(V1 = runif(10000000,100,10000),V2 =runif(10000000,100,10000))

df对象是SparkDataFrame,它将在 Spark群集中创建。 as.DataFrame在R中执行,但实际的SparkDataFrame仅存在于您的群集中。

df <- as.DataFrame(rund)

为了轻松区分R和Spark数据帧,您可以使用class函数:

> class(df)
[1] "data.frame"
> class(df.spark)
[1] "SparkDataFrame"
attr(,"package")
[1] "SparkR"

通常,SparkDataFrame可以用作SparkR包必须提供的各种功能的输入,例如用于排序 Spark中的SparkDataFrame。调用Spark操作时执行Spark操作。此类操作的示例是collect。它触发Spark中的转换并从Spark群集中检索计算数据,并在本地R实例中创建相应的R数据帧。如果您查看文档,可以看到函数是否可以摄取SparkDataFrame:

##S4 method for signature 'SparkDataFrame'
collect(x, stringsAsFactors = FALSE)

此外,可以使用用户定义的函数在您的Spark集群中执行自定义R代码:https://spark.apache.org/docs/latest/api/R/index.html