2016-09-23 68 views
1

我是新來的火花和sparkR,我的問題如下: 當我寫下面的代碼: 1)。設置環境並啓動spark.session()使用sparkR處理數據時,程序真正在哪裏運行?

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)。另外,誰能告訴我程序在哪裏運行代碼「as.DataFrame()」?在我的電腦或我的服務器上設置爲spark的standalone_mode。

回答

0

SparkR是Spark的接口。這意味着,一些R裏面的函數是由SparkR包爲您提供已從R.你知道類似的用戶體驗重寫或許應該看看文檔,看看哪些星火功能:https://spark.apache.org/docs/latest/api/R/index.html

這些功能通常攝入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,它會在你的星火集羣創建。在R中執行as.DataFrame,但實際的SparkDataFrame僅存在於您的羣集中。

df <- as.DataFrame(rund) 

爲了容易R和火花數據幀之間進行區分,則可以使用class功能:

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

一般而言,SparkDataFrame可以用作輸入的各種功能SparkR包所提供的,例如到sort Spark中的SparkDataFrame。 Spark操作在Spark動作被調用時執行。這種行爲的一個例子是collect。它觸發Spark中的轉換並從Spark集羣中檢索計算的數據,並在本地R實例中創建一個對應的R數據框。如果你看一下的文檔,你可以看到,如果一個函數可以攝取SparkDataFrame:

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

而且有可能在你的星火集羣使用用戶定義函數執行自定義R代碼裏面:https://spark.apache.org/docs/latest/sparkr.html#applying-user-defined-function

+0

謝謝艾克。 我沒有關於分佈式計算系統領域的相對BG,並且對spark和sparkR是新的,所以我在這幾天遭受了很多。 hhaa 如果你有時間,你能幫我提一下我的另一個問題嗎? http://stackoverflow.com/questions/39683374/sparkr-cannot-read-data-at-deployed-workers-but-ok-with-local-machine –

+0

樂於幫助,歡迎來到Stack Overflow。如果此答案或任何其他人解決了您的問題,請將其標記爲已接受。 – Aeck

相關問題