Apache spark Spark中的saveAsTextFile功能是否将数据传输到驱动程序?

Apache spark Spark中的saveAsTextFile功能是否将数据传输到驱动程序?,apache-spark,dataframe,apache-spark-sql,Apache Spark,Dataframe,Apache Spark Sql,首先,我连接了两个数据帧,第一个DF是从第二个DF中过滤出来的,大约8MB(260 000条记录),第二个DF是从cca 2GB(37 000条记录)文件中过滤出来的。然后我打电话 joinedDF.javaRDD().saveAsTextFile("hdfs://xxx:9000/users/root/result"); 我也试过了 joinedDF.write().mode(SaveMode.Overwrite).json("hdfs://xxx:9000/users/root/resul

首先,我连接了两个数据帧,第一个DF是从第二个DF中过滤出来的,大约8MB(260 000条记录),第二个DF是从cca 2GB(37 000条记录)文件中过滤出来的。然后我打电话

joinedDF.javaRDD().saveAsTextFile("hdfs://xxx:9000/users/root/result");
我也试过了

joinedDF.write().mode(SaveMode.Overwrite).json("hdfs://xxx:9000/users/root/result");
我有点困惑,因为我得到了一个例外

错误TaskSetManager:54个任务的序列化结果的总大小 (1034.6 MB)大于spark.driver.maxResultSize(1024.0 MB)

正如我所知,saveAsTextFile应该直接从workers输出。那么为什么我会得到与驱动程序相关的异常呢? 我知道增加spark.driver.maxResultSize的选项,并将其设置为“无限”,但这没有帮助,因为我的驱动程序总共只有4,8GB内存


编辑:

我也尝试了广播变量,变化在df2中

DataFrame df2 = sc.broadcast(table.withColumnRenamed("id", "key").filter("value = 'foo'")).getValue();

在相关帖子中找到了答案

总结@kuujo的回答:

saveAsTextFile不会将数据发送回驱动程序。相反,它 保存完成后,将保存结果发送回驱动程序。 也就是说,saveAsTextFile是分布式的。唯一的情况是它不是 分布式是指只有一个分区或者 在调用之前,将RDD合并回单个分区 保存ASTEXTFILE


你的命令是什么?数据不应该通过驱动程序写入。您是在本地模式、单机模式还是通过Thread/Mesos运行?我是在单机集群模式下运行它,下面是提交详细信息
/bin/spark submit--class“dp.test.Main”--主人spark://xxx.xxx.xxx.xxx:6066 --部署模式群集--执行器核心2--执行器内存4864m--驱动程序内存4864m--驱动程序核心2hdfs://xxx:9000/users/root/myProg.jar
我也尝试了这样做,以使更多的执行者
/bin/spark提交--“dp.test.Main”类--主人spark://xxx.xxx.xxx.xxx:6066 --部署模式群集--执行器核心1--执行器内存2432m--驱动程序内存4864m--驱动程序核心2hdfs://xxx:9000/users/root/myProg.jar
好的,应该没问题。您是否在数据帧中偶然使用广播联接?问题已编辑,联接代码已添加请查看此答案,看看它是否对您有帮助:此外,您可以使用Kryo序列化库,这可能会有所帮助。以下是一个可以帮助您的网站:
DataFrame df2 = sc.broadcast(table.withColumnRenamed("id", "key").filter("value = 'foo'")).getValue();