我正在将一个拼花文件从DataFrame写入S3。当我查看Spark UI时,我可以看到除1项任务外的所有任务都在写作阶段迅速完成(例如199/200)。这最后一个任务似乎要花很长时间才能完成,而且常常由于超出执行器内存限制而失败。
我想知道最后一个任务发生了什么。如何优化它?谢谢。
正如其他人所指出的,数据偏差可能在起作用。
除此之外,我注意到您的任务计数是200。
配置参数spark。sql。洗牌分区配置为联接或聚合洗牌数据时使用的分区数。
此设置的默认值为200,但通常远不是最佳值。
对于小数据,200可能是多余的,您会在多个分区的开销中浪费时间。
对于大数据,200可能会导致大分区,应该将其分解为更多、更小的分区。
真正粗略的经验法则是:-cpu的分区数是2-3倍-或约128MB。
2GB是最大分区大小。如果您将鼠标悬停在2000个分区以下,则当分区数大于2000个时,Spark会使用不同的数据结构进行无序记账[1]
private[spark] object MapStatus {
def apply(loc: BlockManagerId, uncompressedSizes: Array[Long]): MapStatus = {
if (uncompressedSizes.length > 2000) {
HighlyCompressedMapStatus(loc, uncompressedSizes)
} else {
new CompressedMapStatus(loc, uncompressedSizes)
}
}
...
您可以尝试在运行时使用此参数:
<代码>火花。conf.set(“spark.sql.shuffle.partitions”,“300”)
[1] spark的最佳值是什么。sql。洗牌分区,或者在使用Spark SQL时如何增加分区?
听起来你的数据有偏差。在写入S3之前,可以通过在数据帧上调用重新分区来解决此问题。
我尝试过Glemmie Helles Sindholt解决方案,效果很好。这是代码:
path = 's3://...'
n = 2 # number of repartitions, try 2 to test
spark_df = spark_df.repartition(n)
spark_df.write.mode("overwrite").parquet(path)
我试图做一些非常简单的事情,我有一些非常愚蠢的挣扎。我想这一定与对火花的基本误解有关。我非常感谢任何帮助或解释。 我有一张非常大的桌子(~3 TB,~300毫米行,25k个分区),在s3中保存为拼花地板,我想给一些人一个很小的拼花文件样本。不幸的是,这要花很长时间才能完成,我不明白为什么。我尝试了以下方法: 然后当这不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了,以尝试调试。
如果我写信 临时工。拼花文件夹我得到了和行号相同的文件号 我想我不太了解拼花地板,但它是自然的吗?
我正在使用Apache Spark生成拼花文件。我可以按日期划分它们,没有问题,但在内部我似乎无法按正确的顺序排列数据。 在处理过程中,顺序似乎丢失了,这意味着拼花地板元数据是不正确的(具体来说,我想确保拼花地板行组反映排序顺序,以便特定于我的用例的查询可以通过元数据有效地过滤)。 考虑以下示例: 使用这种方法,我确实得到了正确的拼花地板分区结构(按日期)。更好的是,对于每个日期分区,我看到一个大
我有一个pySpark工作(spark 2.4.1),它在10%的情况下似乎工作正常,其他时候似乎永远停留在一个任务上,我不能真正理解发生了什么。以下是我在pyspark代码中所做的: 我似乎永远停留在对“Topandas”调用的评价中。当我检查executors选项卡时,只有一个executors可以运行,调用堆栈如下: null 编辑:我也有2个执行器失败,错误如下: java.io.ioEx
我是pycharm的新用户,我很难运行一个简单的文件来导入熊猫。我有以下问题: 每当我打开项目时,“扫描文件到索引”都需要很长时间。 我可以看到在索引中,它使用了Anaconda2中的包/文件,这就是为什么我的程序需要很长时间才能运行。 我已经尝试使某些文件夹“排除”,如此处所述 PyCharm 4.0.5 挂在“扫描文件以索引”后台任务上,我还删除了此处所述的“缓存”文件夹 Intelli J
我有一个带有20个分区的火花数据帧df,每个分区都有一天的数据。这意味着我的输入数据帧已经按天分区。我的目标是编写一个拼花文件,该文件也按天分区。如果我尝试以下命令: df。重新划分(5)。写模式(“覆盖”)。partitionBy(['day'])。拼花地板(“路径”) 当我的输入数据框已经分区时,有很多洗牌正在发生。请注意,这个数据框包含超过10亿行,并且由于洗牌,它正在杀死我的执行器。 有没