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

When use sparkR to process data, where is the place that the programme really run?

我是 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).程序在哪里执行 'splitting'?在我的本地机器上还是在服务器上?

2).另外,谁能告诉我程序 运行 代码 "as.DataFrame()" 到底在哪里?在我的计算机或我的服务器上设置为 standalone_mode of spark.

SparkR 是 Spark 的接口。这意味着某些 R 函数被 SparkR 包覆盖,以提供您已经从 R 中了解到的类似用户体验。您可能应该查看文档以了解哪些 Spark 函数可用: https://spark.apache.org/docs/latest/api/R/index.html

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

在您的示例中,您创建了一个 local 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 包必须提供的各种功能的输入,例如 groupsort 你在 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/sparkr.html#applying-user-defined-function.