Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 火花性能优化_Apache Spark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

Apache spark 火花性能优化

Apache spark 火花性能优化,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,我的spark应用程序比较两个巨大的数据帧,并将结果保存到磁盘。我在相同的数据帧上进行了3次不同的比较,并对所有数据帧进行联合以获得输出数据帧,因此在洗牌阶段spark将相同的数据帧写入内存3次,而在洗牌读取阶段spark读取大小是实际数据帧大小的3倍。因此,spark在相同的数据帧上进行了3次比较。 我尝试在比较之前持久化数据帧,这样它就不需要洗牌写入3次,但我的工作失败,超时错误,即使我的2个数据帧适合内存 如何控制随机写入/读取以最大限度地提高性能?这里我的输入数据是拼花格式的,所以直接用

我的spark应用程序比较两个巨大的数据帧,并将结果保存到磁盘。我在相同的数据帧上进行了3次不同的比较,并对所有数据帧进行联合以获得输出数据帧,因此在洗牌阶段spark将相同的数据帧写入内存3次,而在洗牌读取阶段spark读取大小是实际数据帧大小的3倍。因此,spark在相同的数据帧上进行了3次比较。
我尝试在比较之前持久化数据帧,这样它就不需要洗牌写入3次,但我的工作失败,超时错误,即使我的2个数据帧适合内存

如何控制随机写入/读取以最大限度地提高性能?这里我的输入数据是拼花格式的,所以直接用输入数据创建dataframe,这里是伪代码,我有来自输入DFs的临时表

df_comp = sqlContext.sql("SELECT a.* FROM tab1 a LEFT OUTER JOIN tab2 b on a.id==b.id WHERE b.id IS null \
UNION ALL \
SELECT b.* FROM tab1 a RIGHT OUTER JOIN tab2 b on a.id==b.id WHERE a.id IS null \
UNION ALL \
SELECT b.* FROM tab2 b JOIN tab1 a On b.id==a.id or b.RCPNT_ID != a.RCPNT_ID")

你能和我们分享一下相关的代码吗?我不太明白你在做什么“比较”。在我看来,你在尝试一个完全的外部连接。您想尝试一下吗?不,实际比较两个表的结果只有2%。在您的Spark UI中,在连接阶段,这个过程使用了多少个分区?是200吗?或者是更多的分区?总共有600个,所以200个/连接