使用sparklyr有效地将data.table写入Spark

时间:2019-07-03 11:18:09

标签: r apache-spark sparklyr

我正尝试使用sparklyr将大型data.table上传到Spark中,如下所示:

copy_to(sc, obj, "name_of_object")

其中sc是一个Spark连接,obj是我的对象。经过一番挖掘之后,我发现将表写入Spark的步骤如下(在spark_data_copy()中):使用序列化程序spark_serialize_csv_scala在磁盘上创建了一个csv文件,该序列化程序使用基数R write.table()。写入文件后,R指示Spark读取csv。

我发现这对于我的使用而言不是很有效,R似乎挂起了,并且只能对csv编写任务的一部分进行太多的调整。是否存在将R内存中已有的数据放入Spark中的有效方法?

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用data.table的fwrite()编写一个csv,然后使用spark_read_csv()导入一个csv。这样可以提高两个速度:

  1. fwritewrite.table()
  2. 由于某些原因,使用spark_read_csv()的速度也快得多,像这样运行,本地Spark实例将使用所有内核(也许会有更多差异)。对我来说,在一台真正有用的16核计算机上。

如果有时间,我会进行更精确的测量。