当前位置: 首页 > 知识库问答 >
问题:

Pyspark dataframe重新分区将所有数据放在一个分区中

董权
2023-03-14

我有一个具有如下模式的dataframe:

root
 |-- category_id: string (nullable = true)
 |-- article_title: string (nullable = true)
+-----------+--------------------+
|category_id|     articletitle   |
+-----------+--------------------+
|       1000|HP EliteOne 800 G...|
|       1000|ASUS  EB1501P ATM...|
|       1000|HP EliteOne 800 G...|
|          1|ASUS R557LA-XO119...|
|          1|HP EliteOne 800 G...|
+-----------+--------------------+
p_df = df.repartition(2, "category_id")
p_df.rdd.mapPartitionsWithIndex(some_func)

共有1个答案

苏运良
2023-03-14

您已经正确使用了repartitionMapPartitionsWithIndex函数。

如果将explain函数应用为

df.repartition(2, "category_id").explain()

您将看到下面的输出,它清楚地表明它被重新分区为两个分区。

== Physical Plan ==
Exchange hashpartitioning(category_id#0L, 2)
+- Scan ExistingRDD[category_id#0L,articletitle#1L]

category_id1000更改为其他内容。

 类似资料:
  • 我在这里浏览了文档:https://spark . Apache . org/docs/latest/API/python/py spark . SQL . html 它说: 重新分区:生成的DataFrame是哈希分区的 对于repartitionByRange:结果DataFrame是范围分区的 而且之前的一个问题也提到了。然而,我仍然不明白它们到底有什么不同,当选择一个而不是另一个时会有什么

  • 作为卡桑德拉数据分区的后续,我得到了vNodes的想法。感谢“西蒙·丰塔纳·奥斯卡森” 当我尝试使用vNodes进行数据分区时,我有几个问题, 我尝试观察2节点中的分区分布() 因此,根据我在两个节点中的观察,随着一个范围的扩展,节点61的值从-9207297847862311651到-9185516104965672922。。。 注意:分区范围从9039572936575206977到90199

  • 根据Spark 1.6.3的文档,应该保留结果数据表中的分区数: 返回由给定分区表达式分区的新DataFrame,保留现有的分区数 Edit:这个问题并不涉及在Apache Spark中删除空DataFrame分区的问题(例如,如何在不产生空分区的情况下沿列重新分区),而是为什么文档所说的内容与我在示例中观察到的内容不同

  • 我在任何地方都找不到如何在RDD内部执行重新分区?我知道您可以在RDD上调用重新分区方法来增加分区数量,但它是如何在内部执行的呢? 假设,最初有5个分区,他们有- 第一个分区 - 100 个元素 第二个分区 - 200 个元素 第 3 个分区 - 500 个元素 第 4 个分区 - 5000 个元素 第 5 分区 - 200 个元素 一些分区是倾斜的,因为它们是从HBase加载的,并且数据没有正确

  • 整数n的划分是将n写成正整数和的一种方式。对于 例如,对于n=7,一个分区是1 1 5。我需要一个程序来查找所有 使用“r”整数对整数“n”进行分区。例如,

  • 问题内容: 我的桌子上有十亿多条记录。为了提高性能,我将其划分为30个分区。最频繁的查询包含在where子句中,因此我决定在表上对表进行分区。 基本上,分区是通过以下方式创建的: 我运行了整个数据库,尤其是通过运行以下命令使它为该表的列收集了额外的统计信息: 但是,当我运行对列进行筛选的查询时,计划程序会显示它仍在扫描所有分区。设置为,所以这不是问题。 我怎样做才能使刨床有更好的计划?我是否还需要