【问题标题】:Spark SQL: Number of partitions being generated seems weirdSpark SQL:正在生成的分区数似乎很奇怪
【发布时间】:2017-07-18 01:45:26
【问题描述】:

我有一个非常简单的 Hive 表,结构如下。

CREATE EXTERNAL TABLE table1(
col1 STRING,
col2 STRING)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
LOCATION 's3://path/';

这个表所指向的目录只有一个大小为 51 KB 的文件。

来自 pyspark shell(使用所有默认值):

df = sparksession.sql("SELECT * from table1")
df.rdd.getNumPartitions()

返回的分区数很奇怪。有时返回 64,有时返回 81。

我的期望是最多看到 1 或 2 个分区。关于为什么我看到这么多分区有什么想法吗?

谢谢。

【问题讨论】:

  • 大部分可能是空的。只需尝试通过指定分区数来重新分区文件。
  • 实际上表中有大约 4000 行,我注意到每个分区中大约有 50 行。

标签: dataframe pyspark task


【解决方案1】:

正如您所说,返回的分区数有时返回 64,有时返回 81,因为它取决于 spark,即使您使用 repartition 命令,它也希望在多少个分区中存储数据,然后它也是对 spark 的请求如果 spark 认为不可能,将数据洗牌到给定的重新分区中,然后它将自己做出决定并将数据存储在随机数量的分区中。

希望这个解释能解决您的问题。

【讨论】:

  • 感谢 Ankit,但它仍然没有。为什么一个简单的 51 KB 文件会产生 64/81 个分区?那仍然是开放的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2013-06-11
  • 2018-02-19
  • 2016-08-19
相关资源
最近更新 更多