使用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 数据框 rund
。 runif
函数也在您的 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 包必须提供的各种功能的输入,例如 group 或 sort 你在 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.
我是 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 数据框 rund
。 runif
函数也在您的 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 包必须提供的各种功能的输入,例如 group 或 sort 你在 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.