rea*_*sow 8 apache-spark apache-spark-1.6
我使用spark 1.6.1。
我的spark应用程序读取s3中存储的10000个以上镶木地板文件。
val df = sqlContext.read.option("mergeSchema", "true").parquet(myPaths: _*)
Run Code Online (Sandbox Code Playgroud)
myPaths
是Array[String]
包含10000个实木复合地板文件的路径的。每条路径都是这样s3n://bucketname/blahblah.parquet
Spark警告消息如下。
WARN TaskSetManager:阶段4包含一个非常大的任务(108KB)。建议的最大任务大小为100KB。
无论如何,Spark设法运行并完成了这项工作,但我想这可能会减慢火花处理工作的速度。
有人对此问题有很好的建议吗?
问题是您的数据集在分区之间分布不均匀,因此某些分区的数据比其他分区更多(因此某些任务会计算出更大的结果)。
默认情况下,Spark SQL假定使用spark.sql.shuffle.partitions
属性来划分200个分区(请参阅其他配置选项):
spark.sql.shuffle.partitions(默认值:200)配置在对联接或聚集的数据进行混排时要使用的分区数。
解决方案是在读取木地板文件之后(并且在执行操作之前)coalesce
或repartition
数据集。
使用explain
或Web UI查看执行计划。
该警告提示您优化查询,以便使用更有效的结果获取(请参阅TaskSetManager)。
带有警告的TaskScheduler(在驱动程序上运行)将使用效率较低的方法IndirectTaskResult
(如代码中所示)获取结果值。
归档时间: |
|
查看次数: |
8710 次 |
最近记录: |