2017-07-05 45 views
3

我試圖使用Sparklyr的函數copy_to將大的dataframe(約580萬條記錄)複製到Spark中。Sparklyr - 無法將data.frames複製到Spark使用copy_to

首先,裝載使用freaddata.table)中的數據時,以及將所述copy_to功能,我得到以下輸出錯誤:

Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""integer64"" to a data.frame

然後,我改變integer64類型的唯一的兩列進character,然後將as.data.frame(它是data.table,因爲我使用fread)應用於所有數據。

使用copy_to再次,它需要很長的時間之前和之後的進度條顯示出來,而是返回了以下結果:

Error in invoke_method.spark_shell_connection(sc, TRUE, class, method, : No status is returned. Spark R backend might have failed.

沒有數據被複制到的火花。

有什麼想法?

回答

3

我碰到過這個問題。不幸的是,將數據幀從內存拷貝到Sparklyr中並不是導入更大數據的最佳方式。當我將數據幀保存到磁盤時,它的效果更好,然後.csv直接將它讀入Spark。

對於最佳性能,這些最好的辦法是將它保存爲磁盤上的鑲木地板格式並讀取。因爲Spark使用DAG工作,所以如果Spark有更高效的磁盤數據格式來執行操作,那麼當您點擊收集,插入或Whathaveyou時,您的整個Spark操作將會更快。