Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Spark数据帧转换为R数据帧_R_Apache Spark_Apache Spark Sql_Apache Zeppelin_Sparkr - Fatal编程技术网

将Spark数据帧转换为R数据帧

将Spark数据帧转换为R数据帧,r,apache-spark,apache-spark-sql,apache-zeppelin,sparkr,R,Apache Spark,Apache Spark Sql,Apache Zeppelin,Sparkr,我在工作中使用齐柏林飞艇上的R来开发机器学习模型。我使用%sparkr,sql(Constring,'select*from table')从配置单元表中提取数据,默认情况下,它会生成一个包含9400万条记录的spark数据帧。 但是,我无法在此Spark df上执行所有R数据扫描任务,因此我尝试使用Collect()、as.data.frame()将其转换为R数据帧,但我遇到了内存节点/超时问题。 我想知道stack overflow社区是否知道通过避免超时问题将Spark df转换为R df

我在工作中使用齐柏林飞艇上的R来开发机器学习模型。我使用
%sparkr,sql(Constring,'select*from table')
从配置单元表中提取数据,默认情况下,它会生成一个包含9400万条记录的spark数据帧。

但是,我无法在此Spark df上执行所有R数据扫描任务,因此我尝试使用
Collect()、as.data.frame()
将其转换为R数据帧,但我遇到了内存节点/超时问题。


我想知道stack overflow社区是否知道通过避免超时问题将Spark df转换为R df的其他方法?

您是否先尝试缓存Spark数据帧?如果先缓存数据,可能有助于加快采集速度,因为数据已经存在于RAM中……这可以消除超时问题。同时,这只会增加您的RAM需求。当您试图序列化或反序列化某些数据类型,或者只是在R和Spark之间的大量数据时,我也看到了这些超时问题。大型数据集的序列化和反序列化远远不是R和Spark的“防弹”操作。此外,94M记录可能对驱动程序节点来说太多了,无法在第一时间处理,尤其是当数据集有很多维度时

我曾经使用过一种变通方法,但我并不引以为豪的是使用spark将数据帧写成CSV,然后让R在脚本的下一行重新读取该CSV文件。奇怪的是,在我这样做的一些案例中,写入文件并读取文件的方法实际上比简单的
collect
操作要快快得多


建议-使用spark编写csv文件时,请务必注意分区。你会得到一堆csv文件,并且必须做一些
tmp的工作,根据定义,这是拥有R dataframe所需要的。如果转换超时怎么办?那么你不应该使用这些。您可以检查
gapply
dapply
方法,这些方法以分布式方式对数据块进行操作。使用SparkyR包怎么样,有什么输入吗?让我们来看看。在我的例子中,我试图在spark数据帧上使用dplyr方法,齐柏林飞艇不允许。因此,我认为让我们将spark df转换为R df可能会解决这个问题,但是,我的数据量很大,转换不是一个选项(至少在上面的讨论中是这样)。似乎我找到了一种方法来解决使用SparkR包的问题,该包包含dplyr包中的大多数方法!很高兴你能弄明白。dplyr和SparkR本质上做的是相同的事情…这些事情实际上只是一个SQL操作。SparkR只允许您以分布式、并行的方式完成这项工作……在我看来,这仍然很酷。