开发者社区> 问答> 正文

df.repartition没有列参数分区?

在PySpark中,重分区模块有一个可选的列参数,该参数会通过该键重分区数据框架。

我的问题是 - 当没有密钥时,Spark如何重新分配?我无法深入研究源代码,以找到Spark本身的位置。

def repartition(self, numPartitions, *cols):

"""
Returns a new :class:`DataFrame` partitioned by the given partitioning expressions. The
resulting DataFrame is hash partitioned.

:param numPartitions:
    can be an int to specify the target number of partitions or a Column.
    If it is a Column, it will be used as the first partitioning column. If not specified,
    the default number of partitions is used.

.. versionchanged:: 1.6
   Added optional arguments to specify the partitioning columns. Also made numPartitions
   optional if partitioning columns are specified.

>>> df.repartition(10).rdd.getNumPartitions()
10
>>> data = df.union(df).repartition("age")
>>> data.show()
+---+-----+
|age| name|
+---+-----+
|  5|  Bob|
|  5|  Bob|
|  2|Alice|
|  2|Alice|
+---+-----+
>>> data = data.repartition(7, "age")
>>> data.show()
+---+-----+
|age| name|
+---+-----+
|  2|Alice|
|  5|  Bob|
|  2|Alice|
|  5|  Bob|
+---+-----+
>>> data.rdd.getNumPartitions()
7
"""
if isinstance(numPartitions, int):
    if len(cols) == 0:
        return DataFrame(self._jdf.repartition(numPartitions), self.sql_ctx)
    else:
        return DataFrame(
            self._jdf.repartition(numPartitions, self._jcols(*cols)), self.sql_ctx)
elif isinstance(numPartitions, (basestring, Column)):
    cols = (numPartitions, ) + cols
    return DataFrame(self._jdf.repartition(self._jcols(*cols)), self.sql_ctx)
else:
    raise TypeError("numPartitions should be an int or Column")

例如:调用这些行完全没问题,但我不知道它的作用。它是整条线的哈希值吗?或许数据框中的第一栏?

df_2 = df_1\

   .where(sf.col('some_column') == 1)\
   .repartition(32)\
   .alias('df_2')

展开
收起
社区小助手 2018-12-06 11:32:12 2907 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    默认情况下,如果没有指定分区,则分区不是基于数据的特征,而是以跨节点的随机和统一方式分布。

    后面的重新分区算法df.repartition执行完整数据混洗,并在分区之间平均分配数据。为了减少数据混洗,最好使用df.coalesce

    以下是如何使用https://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4重新分区的一些很好的解释DataFrame

    2019-07-17 23:18:29
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对 2000 多亿条数据做一次 group by 需要多久? 立即下载
对2000多亿条数据做一次Group By 需要多久 立即下载
低代码开发师(初级)实战教程 立即下载