【问题标题】:Poor spark performance writing to csv写入 csv 的火花性能不佳
【发布时间】:2020-10-21 20:08:26
【问题描述】:

上下文

我正在尝试使用 PySpark 将数据帧写入 .csv。在其他帖子中,我看到用户对此提出质疑,但我需要一个 .csv 来满足业务需求。

我的尝试

几乎所有东西。我试过.repartition(),我试过把驱动内存增加到1T。我还尝试先缓存我的数据,然后写入 csv(这就是为什么下面的屏幕截图表明我正在尝试缓存而不是写入 csv)似乎没有任何效果。

会发生什么

因此,UI 不会显示任何任务失败。作业——无论是写入 csv 还是先缓存,都接近完成,只是挂起。

截图

然后..如果我深入研究工作..

如果我进一步深入了解

最后,这是我的设置:

【问题讨论】:

  • 您是否执行了太多需要您一次又一次地缓存 df 的操作?
  • @ShubhamJain 不,我缓存数据帧后只有一个 .count() 语句
  • 您能分享一下您正在使用的转换以及保存数据框的命令以及数据大小的一些信息
  • @ShubhamJain 该 DAG 会有所帮助还是您的意思是实际代码?我项目中的最后一行代码是 df.cache().count() 然后是 df.spark.write.csv('df.csv')

标签: performance apache-spark pyspark apache-spark-sql


【解决方案1】:

当执行多个操作时,您不需要缓存数据帧,因为缓存会有所帮助,如果不需要,我建议您也删除计数.. 现在在保存数据框时确保所有的执行器都在使用中。

如果您的数据帧为 50 GB,请确保您没有创建多个小文件,因为这会降低性能。

您可以在保存之前重新分区数据,因此如果您的数据框有一个列将数据框均分,则使用该列或找到最佳数量进行重新分区。

df.repartition('col', 10).write.csv()

Or

#you have 32  executors with 12 cores each so repartition accordingly

df.repartition(300).write.csv()

【讨论】:

    【解决方案2】:

    当您使用 databricks.. 您可以尝试使用 databricks-csv 包并告诉我们

    from pyspark.sql import SQLContext
    sqlContext = SQLContext(sc)
    
    
    df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('file.csv')
    train.write.format('com.databricks.spark.csv').save('file_after_processing.csv')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多