Spark Dataframe 未分发
Posted
技术标签:
【中文标题】Spark Dataframe 未分发【英文标题】:Spark Dataframe not distributed 【发布时间】:2018-01-31 23:15:53 【问题描述】:我不明白为什么我的数据框只在一个节点上。 我在 spark 独立集群上有一个 14 台机器和 4 个物理 CPU 的集群。
我通过笔记本连接并创建我的火花上下文:
我期望 8 个分区的并行性,但是当我创建一个数据框时,我只得到一个分区:
我错过了什么?
感谢来自 user8371915 的分析器,我重新分区了我的数据框(我正在读取一个压缩文件 (.csv.gz),所以我理解拆分表。
但是当我对其进行“计数”时,我认为它仅在一个执行者上执行: 这里即在 executor n°1 上,即使文件大小为 700 Mb,并且位于 HDFS 上的 6 个块上。 据我了解,微积分应该超过 10 个核心,超过 5 个节点......但一切都只在一个节点上计算:-(
【问题讨论】:
【参考方案1】:有两种可能:
文件大小低于spark.sql.files.maxPartitionBytes
。
使用 gzip 等不可分割的格式压缩文件。
第一种情况你可能会考虑调整参数,但如果你用默认值,它已经很小了。
在第二种情况下,最好在加载到 Spark 之前解压缩文件。如果你不能这样做,加载后repartition
,但它会很慢。
【讨论】:
我想我是第二种情况,我相应地更新了我的问题 “gz”文件上的“重新分区”似乎不起作用。我直接在 hdfs 中解压了“gz”,并在上面重建了一个数据框 => 现在我可以更改分区的数量,并看到更快的结果。 它会工作,很好,但它发生在加载之后。第一阶段不受影响。 我无法真正重新分区 gz 文件。我必须在 csv 上对其进行转换才能使分区正常工作。以上是关于Spark Dataframe 未分发的主要内容,如果未能解决你的问题,请参考以下文章
Spark DataFrame RangePartitioner