gpt4 book ai didi

python - 没有列参数的 df.repartition 对什么进行分区?

转载 作者:行者123 更新时间:2023-12-04 15:17:28 24 4
gpt4 key购买 nike

在 PySpark 中,重新分区模块有一个可选的列参数,它当然会通过该键重新分区您的数据帧。

我的问题是 - 当没有 key 时,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')

最佳答案

默认情况下,如果没有指定分区器,则分区不是基于数据的特征,而是以随机和均匀的方式分布在节点之间。df.repartition 背后的重新分区算法进行完整的数据洗牌并在分区之间平均分配数据。为了减少洗牌,最好使用 df.coalesce这里有一些很好的解释如何用 DataFrame 重新分区
https://medium.com/@mrpowers/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4

关于python - 没有列参数的 df.repartition 对什么进行分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53529974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com