我正在尝试使用Sparklyr的函数dataframe
将大copy_to
(大约580万条记录)复制到Spark中。
首先,使用fread
(data.table
)加载数据并应用copy_to
函数时,出现以下输出错误:
as.data.frame.default(x [[i]],可选= TRUE)出错: 不能强制类“”integer64“”到data.frame
然后,我将integer64
类型中仅有的两列更改为character
,然后应用了as.data.frame
(它是data.table
,因为我使用了fread
)所有数据。
再次使用copy_to
,进度条显示之前和之后需要很长时间,但会返回以下结果:
invoke_method.spark_shell_connection中的错误(sc,TRUE,类,方法,: 没有返回状态。 Spark R后端可能失败了。
没有数据被复制到Spark。
有什么想法吗?
答案 0 :(得分:4)
我遇到过这种情况。不幸的是,将数据帧从内存复制到Sparklyr并不是导入更大数据的最佳方法。当我将数据帧作为.csv
保存到磁盘然后将其直接读入Spark时,它可以更好地贯穿始终。
为了获得最佳性能,这些最好的方法是将其保存到磁盘上的镶木地板格式并阅读。因为Spark使用DAG,如果你有一个更高效的磁盘数据格式供Spark进行操作,当你点击collect,insert或whathaveyou时,你的整个Spark操作会更快。