Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 pysaprk数据帧写入速度非常慢_Apache Spark_Pyspark - Fatal编程技术网

Apache spark pysaprk数据帧写入速度非常慢

Apache spark pysaprk数据帧写入速度非常慢,apache-spark,pyspark,Apache Spark,Pyspark,我们正在使用分区方式(年、月、日)和附加模式将spark数据框写入拼花地板。 这里的问题是,随着存储位置(存储拼花文件的位置)中数据的增加,写入所需的时间急剧增加。当我检查日志时,我发现filescanRDD正在读取存储位置中可用的每个拼花地板文件。有没有办法提高性能 示例代码: df.repartition('day').write.partitionBy('year','month','day').parquet("location",mode='append') 下面是日志,从4:10:

我们正在使用分区方式(年、月、日)和附加模式将spark数据框写入拼花地板。 这里的问题是,随着存储位置(存储拼花文件的位置)中数据的增加,写入所需的时间急剧增加。当我检查日志时,我发现filescanRDD正在读取存储位置中可用的每个拼花地板文件。有没有办法提高性能

示例代码:

df.repartition('day').write.partitionBy('year','month','day').parquet("location",mode='append')
下面是日志,从4:10:15到5:10:15之间有时间间隔,我什么也看不到

20/01/23 04:10:15 INFO metrics: type=HISTOGRAM, name=application_1577238363313_31976.1.CodeGenerator.sourceCodeSize, count=394, min=430, max=467509, mean=4483.268903934098, stddev=5676.791863953458, median=2491.0, p75=4394.0, p95=15365.0, p98=24887.0, p99=32063.0, p999=32063.0
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-client.usedDirectMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-client.usedHeapMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-server.usedDirectMemory, value=50331648
20/01/23 05:10:15 INFO metrics: type=GAUGE, name=application_1577238363313_31976.1.NettyBlockTransfer.shuffle-server.usedHeapMemory, value=50331648

您的问题与
模式=append
有关。在此模式下,Spark读取目标中的所有文件,以便创建新的文件名。您可以使用将
parquet.enable.summary元数据更改为
False

sparkConf.set("parquet.enable.summary-metadata", "false")

您可以将文件导出到另一个目录中,然后手动将其移动到所需的目录中。

问题在于分区函数。您应该在磁盘分区之前创建内存分区,如下所示

df=df1.repartition(col("year"),col("month"),col("day"))
df.coalesce(2).write.partitionBy('year','month','day').parquet("location",mode='append')

参考资料:

使用coalesce的具体原因是什么?我们正在编写的数据量很小,因此使用coalesce时请确保添加以下内容:集群大小、数据大小、spark提交模式和运行的完整日志,这样更容易提供方法。到目前为止,输入还不够。我已经添加了日志